2

我试图让工作人员按照此处解释的方法运行一些异步函数。

这意味着,在我的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.

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

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

4

1 回答 1

2

这篇文章之后,我替换delayviews.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)

它似乎正在工作。不知道为什么,虽然...

于 2017-05-04T07:06:18.190 回答