如果给定超时的活动状态保持为TRUE,是否有一种简单的方法可以使进程终止?
我正在使用Python多处理模块在多个核心中启动进程。有时这些进程没有成功,在没有做任何事情的情况下卡住了,但是处于活动状态(is_alive()= TRUE)。
jobs = [] # this list will contain all jobs
for i in studies: # we will call as many processes as elements in studies
arguments = (i) # my arguments
p = multiprocessing.Process(target = myprocess, args = arguments)
jobs.append(p) # list of jobs
p.start() # start process
我正在寻找用p.start()代替的东西:
p.start_with_timeout(t=mytime)
谢谢!
答案 0 :(得分:-1)
我设法通过以下方式解决了我的问题:
最初我开展研究。每项研究都是一个单独的过程。我的问题是我希望这些进程在一定的超时后自行“死”。我不能为每个进程执行p.join(timeout)跟随y p.terminate(),因为它会进入主循环并延迟新进程的启动,直到前一个进程不活动。
解决方案是引入一个层次结构,其中p.start()不会直接启动我感兴趣的进程('myprocess'),而是另一个负责查杀的进程。我把它叫做'dordie':
jobs = [] # this list will contain all jobs
for i in studies: # we will call as many processes as elements in studies
arguments = (i) # my arguments
p = multiprocessing.Process(target = dordie, args = arguments)
jobs.append(p) # list of jobs
p.start() # start process
'dordie'负责启动每个'myprocess'并在上面的'for'循环之外杀死每个'myprocess',这确保无论启动多少个进程,它们都会更早地死掉比在其中硬编码的超时,但同时,没有什么能阻止更多的进程被启动。
def dordie(i):
arguments = (i)
timeout = 600
p = multiprocessing.Process(target=myprocess, args=arguments)
p.start()
p.join(timeout)
if p.is_alive():
p.terminate()
我不是程序员,所以也许这不是一个优雅的解决方案,尽管它的工作就像一个奇迹!无论如何,谢谢您的建议。