【发布时间】:2020-04-22 00:59:51
【问题描述】:
我创建了一个网络应用程序,用户可以在其中运行多个脚本(芹菜任务)。
我浏览了this artcle,发现我必须使用--pool (prefork, eventlet or gevent) 而不是solo,因为一次可以运行更多脚本。
如果用户需要,我需要能够终止正在运行的任务,因此我只需要使用 prefork 。我发现eventlet and gevent没有实现revoke方法。
现在的问题。
当我用 eventlet or gevent 运行 --pool 时,任务被接收并执行。但我不能像所说的那样终止它。
当我运行 --pool 和 prefork 时,它应该能够终止任务,但是当我运行任务时,它只被接收但甚至不被执行。
最后一个认为我不明白。我试图从--pole=solo 开始只是为了尝试撤销任务(但我以后不能使用它,因为我需要一次运行更多脚本)。
而这里的 revoke 方法什么也不做。
app.control.revoke(task_id, terminate=True)
所以我的问题是我应该使用什么,以便能够终止任务并能够一次运行更多任务。
Krukas 更新:
当我运行 celery 时 celery -A TNS worker --loglevel=INFO --without-gossip --without-mingle --without-heartbeat -Ofair --pool=gevent --concurrency=2
然后在应用中运行脚本 celery 显示
[2020-01-04 18:13:33,213: INFO/MainProcess] Received task: api.tasks.task_1[d4e37b3b-67a7-49b9-879f-5157bcc28585]
[2020-01-04 18:13:43,418: INFO/MainProcess] Task api.tasks.task_1[d4e37b3b-67a7-49b9-879f-5157bcc28585] succeeded in 10.202999999999975s: None
所以任务被执行了,当我通过celery -A TNS worker -l info --without-gossip --without-mingle --without-heartbeat -Ofair --pool=prefork --concurrency=2运行Celery时
日志显示
[2020-01-04 18:21:39,255: INFO/MainProcess] Received task: api.tasks.task_1[4071904e-e014-4075-828e-58a0a87c781f]
[2020-01-04 18:21:40,696: INFO/SpawnPoolWorker-4] child process 9708 calling self.run()
[2020-01-04 18:21:40,696: INFO/SpawnPoolWorker-3] child process 8428 calling self.run()
脚本被执行。
【问题讨论】: