Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中是否有分布式任务队列使我能够杀死不愿意合作的挂起的任务_Python_Multithreading_Celery_Task Queue - Fatal编程技术网

Python中是否有分布式任务队列使我能够杀死不愿意合作的挂起的任务

Python中是否有分布式任务队列使我能够杀死不愿意合作的挂起的任务,python,multithreading,celery,task-queue,Python,Multithreading,Celery,Task Queue,基本上,我有很多任务(一批大约1000个),这些任务的执行时间差别很大(从不到秒到10分钟)。我知道,如果一项任务执行时间超过一分钟,我可以终止它。这些任务是优化某些数据挖掘模型的步骤(但彼此独立),并且大部分时间都花在某些C扩展函数中,因此如果我试图优雅地杀死它们,它们将不会合作 是否存在适合该模式的分布式任务队列---AFAIK:Cellery允许中止愿意合作的任务。但我可能错了 我最近问了一个类似的问题,关于在纯python中终止挂起的函数 我想我可以对芹菜任务进行子类化,这样它会产生一个

基本上,我有很多任务(一批大约1000个),这些任务的执行时间差别很大(从不到秒到10分钟)。我知道,如果一项任务执行时间超过一分钟,我可以终止它。这些任务是优化某些数据挖掘模型的步骤(但彼此独立),并且大部分时间都花在某些C扩展函数中,因此如果我试图优雅地杀死它们,它们将不会合作

是否存在适合该模式的分布式任务队列---AFAIK:Cellery允许中止愿意合作的任务。但我可能错了

我最近问了一个类似的问题,关于在纯python中终止挂起的函数

我想我可以对芹菜任务进行子类化,这样它会产生一个新的进程,然后执行它的有效负载,如果需要很长的时间,就会中止它的执行,但这样我就会被新解释器的初始化开销扼杀

允许多进程管理,包括终止不合作的任务

但是:

  • 这是测试版软件,即使它为可靠的gunicorn供电
  • 我不知道它如何处理1000个进程
  • 进程之间的通信尚未包括在内,因此您必须使用例如
另一种可能性是使用,以便在36000秒内引发异常。但是如果有人获得GIL,信号不会被触发,而C程序可能会这样做。

支持。您可以使用时间限制终止长时间运行的任务。除了终止任务外,您还可以使用软限制来处理任务中的SoftTimeLimitExceeded异常,并干净地终止任务

from celery.task import task
from celery.exceptions import SoftTimeLimitExceeded

@task
def mytask():
    try:
        do_work()
    except SoftTimeLimitExceeded:
        clean_up_in_a_hurry()

撤销芹菜任务时,可以为其提供可选的
terminate=True
关键字

task.revoke(terminate=True)

它并不完全符合您的要求,因为它不是由进程本身完成的,但是您应该能够扩展task类以自杀,或者拥有一个重新整理清理任务或进程清除未按时完成的任务。

您是否查看了
IPython.parallel
?它支持负载平衡和超时。