来自 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)
它似乎在起作用。不过不知道为什么...
我正在尝试让工作人员按照 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)
它似乎在起作用。不过不知道为什么...