2017-05-02 109 views
0

我試圖按照解釋here的方法來讓一個工作人員運行一些異步函數。rqworker從django-rq沒有收到任務

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

我的第一個想法是,因爲我同時使用兩個不同的終端,連接不正確完成。但是,我認爲這沒有意義,因爲有時異步任務確實會運行。

爲什麼工人有時沒有看到任務?

回答

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) 

而且它似乎是工作。不知道爲什麼,但...

+0

它可能與此有關:https://github.com/ui/django-rq/issues/193 – J0ANMM