Celery Python撤销

时间:2016-05-04 23:44:37

标签: python-2.7 celery celery-task

software -> celery:3.1.20 (Cipater) kombu:3.0.35 py:2.7.6
            billiard:3.3.0.22 py-amqp:1.4.9
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.default.Loader
settings -> transport:amqp results:amqp

目前我有以下功能:

task(bind=True, default_retry_delay=300, max_retries=3)
def A(self,a,b,c,**kwargs)
    .
    B()
    .
    .
    .
    code

这是我打电话取消A的功能。

task(bind=True, default_retry_delay=300, max_retries=3)
def cancelA(self,a,b,c,**kwargs)
    revoke(job.reference, terminate=True)

当我调用cancelA(),但函数A()正在进行并执行函数B()时,任务没有得到 REVOKED 。我调试芹菜,我看到即使在调用撤销后,A()中的任务状态是 PROGRESS ,而不是REVOKED。 这是预期的行为吗?我注意到当B()没有执行时,只需在A中执行代码,正确撤销任务。 作为解决方法,我在调用REVOKE后保持睡眠几秒钟以保证B()已经完成。

0 个答案:

没有答案