从Django vi取消或取消eventlet中的芹菜任务

2024-06-20 15:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用以下命令撤消芹菜任务。在

revoke('d9078da5-9915-40a0-bfa1-392c7bde42ed', terminate=True, signal='SIGKILL')

revoke('d9078da5-9915-40a0-bfa1-392c7bde42ed', terminate=True)

revoke('d9078da5-9915-40a0-bfa1-392c7bde42ed')

这些都不起作用,我的工作线程池是eventlet:Started with

^{pr2}$

请建议如何这样做,因为我的django视图中有一个按钮,它使用我想取消的任务。应该有办法做到这一点,但不确定。有了prefork pool就可以了。在

[2015-10-26 09:07:38,411: ERROR/MainProcess] pidbox command error: NotImplementedError("<class 'celery.concurrency.eventlet.TaskPool'> does not implement kill_job",)
Traceback (most recent call last):
  File "/Users/Michael/.virtualenvs/djangoscrape/lib/python2.7/site-packages/kombu/pidbox.py", line 105, in dispatch
    reply = handle(method, kwdict(arguments))
  File "/Users/Michael/.virtualenvs/djangoscrape/lib/python2.7/site-packages/kombu/pidbox.py", line 126, in handle_cast
    return self.handle(method, arguments)
  File "/Users/Michael/.virtualenvs/djangoscrape/lib/python2.7/site-packages/kombu/pidbox.py", line 120, in handle
    return self.handlers[method](self.state, **arguments)
  File "/Users/Michael/.virtualenvs/djangoscrape/lib/python2.7/site-packages/celery/worker/control.py", line 93, in revoke
    request.terminate(state.consumer.pool, signal=signum)
  File "/Users/Michael/.virtualenvs/djangoscrape/lib/python2.7/site-packages/celery/worker/job.py", line 307, in terminate
    pool.terminate_job(self.worker_pid, signal)
  File "/Users/Michael/.virtualenvs/djangoscrape/lib/python2.7/site-packages/celery/concurrency/base.py", line 116, in terminate_job
    '{0} does not implement kill_job'.format(type(self)))
NotImplementedError: <class 'celery.concurrency.eventlet.TaskPool'> does not implement kill_job

Tags: inpyselflibpackageslinesitejob
1条回答
网友
1楼 · 发布于 2024-06-20 15:09:50

错误消息指出Celery的TaskPool(Eventlet兼容版本)没有此功能。所以您可以自己实现它并将补丁发送给Celery团队,或者只留下一个特性请求并等待。在

复制prefork TaskPool代码并使其适应Eventlet API greenthread.kill()应该很容易。在

相关问题 更多 >