mirror of
https://github.com/django-q2/django-q2.git
synced 2026-10-06 15:58:11 +08:00
adds queue_size()
returns the size of the current redis queue
This commit is contained in:
@@ -4,7 +4,7 @@ import sys
|
|||||||
myPath = os.path.dirname(os.path.abspath(__file__))
|
myPath = os.path.dirname(os.path.abspath(__file__))
|
||||||
sys.path.insert(0, myPath)
|
sys.path.insert(0, myPath)
|
||||||
|
|
||||||
from .tasks import async, schedule, result, result_group, fetch, fetch_group, count_group, delete_group
|
from .tasks import async, schedule, result, result_group, fetch, fetch_group, count_group, delete_group, queue_size
|
||||||
from .models import Task, Schedule, Success, Failure
|
from .models import Task, Schedule, Success, Failure
|
||||||
from .cluster import Cluster
|
from .cluster import Cluster
|
||||||
from .monitor import Stat
|
from .monitor import Stat
|
||||||
|
|||||||
@@ -152,6 +152,19 @@ def delete_group(group_id, tasks=False):
|
|||||||
return Task.delete_group(group_id, tasks)
|
return Task.delete_group(group_id, tasks)
|
||||||
|
|
||||||
|
|
||||||
|
def queue_size(list_key=Conf.Q_LIST, r=redis_client):
|
||||||
|
"""
|
||||||
|
Returns the current queue size.
|
||||||
|
Note that this doesn't count any tasks currently being processed by workers.
|
||||||
|
|
||||||
|
:param list_key: optional redis key
|
||||||
|
:param r: optional redis connection
|
||||||
|
:return: current queue size
|
||||||
|
:rtype: int
|
||||||
|
"""
|
||||||
|
return r.llen(list_key)
|
||||||
|
|
||||||
|
|
||||||
def _sync(pack):
|
def _sync(pack):
|
||||||
"""Simulate a package travelling through the cluster."""
|
"""Simulate a package travelling through the cluster."""
|
||||||
task_queue = Queue()
|
task_queue = Queue()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ sys.path.insert(0, myPath + '/../')
|
|||||||
|
|
||||||
from django_q.cluster import Cluster, Sentinel, pusher, worker, monitor
|
from django_q.cluster import Cluster, Sentinel, pusher, worker, monitor
|
||||||
from django_q.humanhash import DEFAULT_WORDLIST
|
from django_q.humanhash import DEFAULT_WORDLIST
|
||||||
from django_q.tasks import fetch, fetch_group, async, result, result_group, count_group, delete_group
|
from django_q.tasks import fetch, fetch_group, async, result, result_group, count_group, delete_group, queue_size
|
||||||
from django_q.models import Task, Success
|
from django_q.models import Task, Success
|
||||||
from django_q.conf import Conf, redis_client
|
from django_q.conf import Conf, redis_client
|
||||||
from django_q.monitor import Stat
|
from django_q.monitor import Stat
|
||||||
@@ -77,7 +77,7 @@ def test_cluster(r):
|
|||||||
list_key = 'cluster_test:q'
|
list_key = 'cluster_test:q'
|
||||||
r.delete(list_key)
|
r.delete(list_key)
|
||||||
task = async('django_q.tests.tasks.count_letters', DEFAULT_WORDLIST, list_key=list_key)
|
task = async('django_q.tests.tasks.count_letters', DEFAULT_WORDLIST, list_key=list_key)
|
||||||
assert r.llen(list_key) == 1
|
assert queue_size(list_key=list_key, r=r) == 1
|
||||||
task_queue = Queue()
|
task_queue = Queue()
|
||||||
assert task_queue.qsize() == 0
|
assert task_queue.qsize() == 0
|
||||||
result_queue = Queue()
|
result_queue = Queue()
|
||||||
@@ -87,7 +87,7 @@ def test_cluster(r):
|
|||||||
# Test push
|
# Test push
|
||||||
pusher(task_queue, event, list_key=list_key, r=r)
|
pusher(task_queue, event, list_key=list_key, r=r)
|
||||||
assert task_queue.qsize() == 1
|
assert task_queue.qsize() == 1
|
||||||
assert r.llen(list_key) == 0
|
assert queue_size(list_key=list_key, r=r) == 0
|
||||||
# Test work
|
# Test work
|
||||||
task_queue.put('STOP')
|
task_queue.put('STOP')
|
||||||
worker(task_queue, result_queue, Value('f', -1))
|
worker(task_queue, result_queue, Value('f', -1))
|
||||||
@@ -142,14 +142,14 @@ def test_async(r, admin_user):
|
|||||||
assert isinstance(k, str)
|
assert isinstance(k, str)
|
||||||
# run the cluster to execute the tasks
|
# run the cluster to execute the tasks
|
||||||
task_count = 10
|
task_count = 10
|
||||||
assert r.llen(list_key) == task_count
|
assert queue_size(list_key=list_key, r=r) == task_count
|
||||||
task_queue = Queue()
|
task_queue = Queue()
|
||||||
stop_event = Event()
|
stop_event = Event()
|
||||||
stop_event.set()
|
stop_event.set()
|
||||||
# push the tasks
|
# push the tasks
|
||||||
for i in range(task_count):
|
for i in range(task_count):
|
||||||
pusher(task_queue, stop_event, list_key=list_key, r=r)
|
pusher(task_queue, stop_event, list_key=list_key, r=r)
|
||||||
assert r.llen(list_key) == 0
|
assert queue_size(list_key=list_key, r=r) == 0
|
||||||
assert task_queue.qsize() == task_count
|
assert task_queue.qsize() == task_count
|
||||||
task_queue.put('STOP')
|
task_queue.put('STOP')
|
||||||
# let a worker handle them
|
# let a worker handle them
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from django.utils import timezone
|
|||||||
|
|
||||||
from django_q.conf import redis_client
|
from django_q.conf import redis_client
|
||||||
from django_q.cluster import pusher, worker, monitor, scheduler
|
from django_q.cluster import pusher, worker, monitor, scheduler
|
||||||
from django_q.tasks import Schedule, fetch, schedule as create_schedule
|
from django_q.tasks import Schedule, fetch, schedule as create_schedule, queue_size
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@@ -34,7 +34,7 @@ def test_scheduler(r):
|
|||||||
# push it
|
# push it
|
||||||
pusher(task_queue, stop_event, list_key=list_key, r=r)
|
pusher(task_queue, stop_event, list_key=list_key, r=r)
|
||||||
assert task_queue.qsize() == 1
|
assert task_queue.qsize() == 1
|
||||||
assert r.llen(list_key) == 0
|
assert queue_size(list_key=list_key,r=r) == 0
|
||||||
task_queue.put('STOP')
|
task_queue.put('STOP')
|
||||||
# let a worker handle them
|
# let a worker handle them
|
||||||
result_queue = Queue()
|
result_queue = Queue()
|
||||||
|
|||||||
@@ -213,6 +213,14 @@ Reference
|
|||||||
|
|
||||||
Renamed from get_task
|
Renamed from get_task
|
||||||
|
|
||||||
|
.. py:function:: queue_size()
|
||||||
|
|
||||||
|
Returns the size of the broker queue.
|
||||||
|
Note that this does not count tasks currently being processed.
|
||||||
|
|
||||||
|
:returns: The amount of task packages in the broker
|
||||||
|
:rtype: int
|
||||||
|
|
||||||
.. py:function:: result_group(group_id, failures=False)
|
.. py:function:: result_group(group_id, failures=False)
|
||||||
|
|
||||||
Returns the results of a task group
|
Returns the results of a task group
|
||||||
|
|||||||
Reference in New Issue
Block a user