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()已经完成。