来自 django-rq 的 rqworker 没有收到任务

rqworker from django-rq not receiving tasks

我正在尝试让工作人员按照 here 解释的方法实现一些异步功能 运行。

这意味着,在我的 tasks.py 文件中我有:

from django_rq import job
@job
def long_function(one_list):

    #many stuff that should be done asynchrounously

然后在我的 views.py 文件中:

from .tasks import long_function
def render_function(request):
    #some code to get one_list

    long_function.delay(one_list)

    #some more code to render the page

    return render(request, 'results_page.html', context)

目前我正在本地进行测试。 因此,我打开了两个终端:一个到 运行 python manage.py runserver,另一个到 运行 python manage.py rqworker default.

因此,当我在浏览器中加载 'results_page.html' 时,我希望任务排队并启动 运行 rqworker。问题是这种情况只发生在一些随机时间,而在其余时间,rqworker 的终端只显示:

*** Listening on default...
Sent heartbeat to prevent worker timeout. Next one should arrive within 420 seconds.
Sent heartbeat to prevent worker timeout. Next one should arrive within 420 seconds.

我的第一个想法是,由于我同时使用两个不同的终端,因此连接不正确。但是,我认为这没有意义,因为有时异步任务会 运行.

为什么工作人员有时看不到任务?

this文章之后,我替换了views.py中的delay函数。

来自

from .tasks import long_function

def render_function(request):
    #some code to get one_list

    long_function.delay(one_list)

    #some more code to render the page

    return render(request, 'results_page.html', context)

import django_rq
from .tasks import long_function

def render_function(request):
    #some code to get one_list

    queue = django_rq.get_queue('default')
    queue.enqueue(long_function, one_list)

    #some more code to render the page

    return render(request, 'results_page.html', context)

它似乎在起作用。不过不知道为什么...