jb.*_*jb. 6 python multithreading task-queue celery
基本上我有很多任务(大约1000个批次),这些任务的执行时间可以有很大的不同(从不到几秒到10分钟).我知道如果一项任务执行超过一分钟我就可以杀死它.这些任务是优化某些数据挖掘模型的步骤(但彼此独立),并且大部分时间都在一些C扩展函数中,因此如果我试图优雅地杀死它们,它们就不会合作.
是否存在适合该模式的分布式任务队列--- AFAIK:celery允许中止愿意合作的任务.但我可能错了.
我最近在多线程环境中询问了关于在Python中杀死挂起函数的类似问题.
我想我可以将celery任务子类化,因此它会生成一个新进程,然后执行其有效负载,如果需要很长时间就会中止它的执行,但之后我会被初始化新解释器的开销所杀死.
芹菜支持时间限制.您可以使用时间限制来终止长时间运行的任务.除了执行任务之外,您还可以使用软限制,这些限制可以处理任务中的SoftTimeLimitExceeded异常并干净地终止任务.
from celery.task import task
from celery.exceptions import SoftTimeLimitExceeded
@task
def mytask():
try:
do_work()
except SoftTimeLimitExceeded:
clean_up_in_a_hurry()
Run Code Online (Sandbox Code Playgroud)