基本上我有很多任务(成批处理大约1000个),这些任务的执行时间可能相差很大(从不到秒到10分钟)。我知道,如果一个任务执行超过一分钟,我可以终止它。这些任务是优化某些数据挖掘模型的步骤(但彼此独立),并且大部分时间都在一些C扩展函数中,因此如果我试图优雅地终止它们,它们就不会合作。在
是否有一个符合这种模式的分布式任务队列——AFAIK:celery允许中止愿意合作的任务。但我可能错了。在
我最近问了一个类似的问题,关于在纯pythonKill hanging function in Python in multithreaded enviorment中杀死挂起函数。在
我想我可以将celery任务子类化,这样它会产生一个新的进程,然后执行它的有效负载,如果需要很长的时间,它就会中止它的执行,但这样一来,新解释器的初始化开销会让我丧命。在
当您撤消芹菜任务时,可以为它提供可选的
terminate=True
关键字。在它并不完全符合您的需求,因为它不是由进程本身完成的,但是您应该能够扩展task类以使其能够自杀,或者重新执行清理任务或进程终止未按时完成的任务。在
Celery支持time limiting。您可以使用时间限制来终止长时间运行的任务。除了终止任务外,您还可以使用软限制来处理任务中的softTimelimitheded异常并干净地终止任务。在
Pistil允许多个进程管理,包括终止不合作的任务。在
但是:
另一种可能是使用timer signal,因此它在36000秒内引发异常。但是如果有人获得了GIL,信号就不会被触发,你的C程序可能会这样做。在
相关问题 更多 >
编程相关推荐