如何在使用multiprocessing.Pool #python时停止在KeyboardInterrupt上执行

时间:2012-07-16 13:20:30

标签: python multiprocessing keyboardinterrupt

  

可能重复:
  Keyboard Interrupts with python's multiprocessing Pool

Python的多处理模块有一个名为Pool http://docs.python.org/library/multiprocessing.html#module-multiprocessing.pool

的东西

当一个进程池正在运行时,我无法使用KeyboardInterrupt(即Ctrl + c)终止脚本。该池产生新的进程,唯一的出路是ctrl + z,然后手动杀死它们。

以下是我尝试测试它的脚本:

import multiprocessing
import random
import time

def sometask(arg):
    #do something nasty to arg
    time.sleep(arg)
    return random.randint(0,arg)

if __name__=="__main__":
    pool = multiprocessing.Pool(processes=4)
    print pool.map(sometask, range(10))

我的主脚本试图做一些比time.sleep()更耗时的事情,每次我尝试测试运行它时,我必须等待它完成或手动杀死它首先找到id它产生的过程。请建议一个解决方法。

1 个答案:

答案 0 :(得分:1)

我也遇到了这个问题。一个可能的解决方法(一个脏的)可以产生另一个进程并将该进程传递给主脚本的PID。让该进程终止主脚本。我试过这个,它对我来说很好。