2013-02-01 74 views
1

我試圖連接到這裏描述的芹菜信號:
http://docs.celeryproject.org/en/latest/userguide/signals.html
我可以連接到task_sent信號沒有問題。芹菜:事件==信號?

但是,當我嘗試連接到task_success或task_postrun,沒有任何反應。 對於我的經紀人和我的後端,我正在使用postgres sql。

我試圖理解爲什麼它不工作

有一件事我想知道從這裏載文:
http://docs.celeryproject.org/en/latest/getting-started/brokers/sqlalchemy.html#broker-sqlalchemy
它說:

限制:活動,包括Django Admin監視器。

目前還不清楚他們是否說事件,它們是指信號。

請幫忙。

tasks.py

from celery import Celery 
from celery.signals import task_sent, task_success, task_postrun 
import celeryconfig 

celery_config_dict = {** stuff **} 

celery = Celery('tasks',) 
celery.add_defaults(celery_config_dict) 


@celery.task 
def add(x, y): 
    return x + y 



@task_sent.connect 
def task_sent_handler(sender=None, task_id=None, task=None, args=None, kwargs=None, **kwds): 
    print(''' Task Sent! 
    sender: %s 
    task_id: %s 
    task: %s 
    args: %s 
    kargs: %s 
    kwds: %s''' % ( sender, 
         task_id, 
         task, 
         args, 
         kwargs, 
         kwds)) 


@task_success.connect 
def task_success_handler(sender=None, result=None, args=None, kwargs=None, **kwds): 
    print(''' Success! 
    sender:%s 
    result:%s 
    args:%s 
    kwargs:%s 
    kwds:%s''' % (sender, result, args, kwargs, kwds)) 


@task_postrun.connect 
def task_postrun_handler(sender=None, task_id=None, task=None, args=None, kwargs=None, retval=None, state=None, **kwds): 
    print(''' Done! 
    sender: %s 
    task_id: %s 
    task: %s 
    retval: %s 
    state: %s 
    args:%s 
    kwargs:%s 
    kwds:%s''' % (sender, task_id, task, retval, state, args, kwargs, kwds,)) 

在Python解釋器

>>> import tasks 
>>> r = tasks.add.apply_async((3,8), countdown=10) 
    Task Sent! 
    sender: tasks.add 
    task_id: None 
    task: tasks.add 
    args: (3, 8) 
    kargs: {} 
    kwds: {'utc': True, 'chord': None, 'retries': 0, 'signal': <Signal: Signal>, 'expires': None, 'callbacks': None, 'errbacks': None, 'taskset': None, 'eta': '2013-02-01T01:43:35.978889', 'id': '87c8d0f4-ae67-4c3d-9e94-45e99cf6304a'} 
>>> 

回答

4

沒有,事件和信號是不一樣的。 見http://docs.celeryproject.org/en/latest/userguide/monitoring.html#events

你不會想到在這個解釋要打印的東西, 的信號是本地的當前進程,所以預電泳/後運行信號將被觸發,該任務在執行過程中 。

+0

好的謝謝。這就說得通了。你能幫我描述一下如何使用這些信號嗎?我不明白我會如何接線。 –

+0

ahh沒關係,我現在看到芹菜服務器芹菜控制檯輸出中發生的事件(我沒有啓動芹菜作爲守護進程,所以我可以看到所有的輸出)好吧,我想我明白這是如何工作的。謝謝! –