瀏覽代碼

Merge pull request #16496 from resilient-tech/feat-bg-front

feat: allow enqueue at front of Redis Queue
version-14
mergify[bot] 3 年之前
committed by GitHub
父節點
當前提交
9278070913
沒有發現已知的金鑰在資料庫的簽署中 GPG Key ID: 4AEE18F83AFDEB23
共有 2 個文件被更改,包括 31 次插入5 次删除
  1. +16
    -0
      frappe/tests/test_background_jobs.py
  2. +15
    -5
      frappe/utils/background_jobs.py

+ 16
- 0
frappe/tests/test_background_jobs.py 查看文件

@@ -28,6 +28,22 @@ class TestBackgroundJobs(unittest.TestCase):
fail_registry = queue.failed_job_registry
self.assertEqual(fail_registry.count, 0)

def test_enqueue_at_front(self):
kwargs = {
"method": "frappe.handler.ping",
"queue": "short",
}

# give worker something to work on first so that get_position doesn't return None
frappe.enqueue(**kwargs)

# test enqueue with at_front=True
low_priority_job = frappe.enqueue(**kwargs)
high_priority_job = frappe.enqueue(**kwargs, at_front=True)

# lesser is earlier
self.assertTrue(high_priority_job.get_position() < low_priority_job.get_position())


def fail_function():
return 1 / 0

+ 15
- 5
frappe/utils/background_jobs.py 查看文件

@@ -40,8 +40,19 @@ def get_queues_timeout():

redis_connection = None

def enqueue(method, queue='default', timeout=None, event=None,
is_async=True, job_name=None, now=False, enqueue_after_commit=False, **kwargs):
def enqueue(
method,
queue='default',
timeout=None,
event=None,
is_async=True,
job_name=None,
now=False,
enqueue_after_commit=False,
*,
at_front=False,
**kwargs
):
'''
Enqueue method to be executed using a background worker

@@ -87,9 +98,8 @@ def enqueue(method, queue='default', timeout=None, event=None,
"queue_args":queue_args
})
return frappe.flags.enqueue_after_commit
else:
return q.enqueue_call(execute_job, timeout=timeout,
kwargs=queue_args)

return q.enqueue_call(execute_job, timeout=timeout, kwargs=queue_args, at_front=at_front)

def enqueue_doc(doctype, name=None, method=None, queue='default', timeout=300,
now=False, **kwargs):


Loading…
取消
儲存