我试图让工作人员按照此处解释的方法运行一些异步函数。
这意味着,在我的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.
我的第一个想法是,当我同时使用两个不同的终端时,连接没有正确完成。但是,我认为这没有意义,因为有时异步任务确实会运行。
为什么工人有时看不到任务?