python - celery :事件==信号?

标签 python postgresql events signals celery

我正在尝试连接到此处描述的 celery 信号:
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
它说:

Limitations: Events, including the Django Admin monitor.

尚不清楚当他们说事件时是否指的是信号。

请帮忙。

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'}
>>>

最佳答案

不,事件和信号不同。 请参阅http://docs.celeryproject.org/en/latest/userguide/monitoring.html#events

您不会期望在该解释器中打印任何内容, 由于信号是当前进程的本地信号,因此将触发预运行/后运行信号 在任务正在执行的进程中。

关于python - celery :事件==信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14638437/

相关文章:

postgresql - 将 2 位数日期转换为 1900 年代的年份

javascript - 动态创建的元素上的事件绑定(bind)?

python - 如何扩展或 "zoom"pandasplot()图?

python - Selenium 显式等待错误地接受 EC.visibility_of_element_located xpath 元素

node.js - 使用 Node 插入 JSON 对象 postgres,无需 for 每个 db.query 循环

执行 'n' 异步回调后,node.js 执行函数

javascript - 在纯 JavaScript 中,什么相当于 "jQuery.on"?

python - 将列表中的连续递增数字分组

python - 从 pandas 字典字典中制作数据帧字典

mysql - PostgreSQL:有效的变量分配示例?