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

时间:2017-05-02 16:39:04

标签: python django django-rq

我正在尝试按照解释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.

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

为什么工人有时没有看到任务?

1 个答案:

答案 0 :(得分:0)

this篇文章之后,我替换了delay中的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)

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)

它似乎正在发挥作用。不知道为什么,但是......