【发布时间】:2014-05-08 11:52:55
【问题描述】:
当我运行一个使用多处理的 python 脚本时,我发现当它收到 Ctrl-C 时很难让它干净地停止。 Ctrl-C 必须按多次,屏幕上会出现各种错误消息。
如何制作一个使用多处理并退出的 Python 脚本 收到 Ctrl-C 时是否干净?
以这个脚本为例
import numpy as np, time
from multiprocessing import Pool
def countconvolve(N):
np.random.seed() # ensure seed is random
count = 0
iters = 1000000 # 1million
l=12
k=12
l0=l+k-1
for n in range(N):
t = np.random.choice(np.array([-1,1], dtype=np.int8), size=l0 * iters)
v = np.random.choice(np.array([-1,1], dtype=np.int8), size = l * iters)
for i in xrange(iters):
if (not np.convolve(v[(l*i):(l*(i+1))],
t[(l0*i):(l0*(i+1))], 'valid').any()):
count += 1
return count
if __name__ == '__main__':
start = time.clock()
num_processes = 8
N = 13
pool = Pool(processes=num_processes)
res = pool.map(countconvolve, [N] * num_processes)
print res, sum(res)
print (time.clock() - start)
【问题讨论】:
-
我会尝试编写一个signal handler 来捕获 ctrl-c 命中并终止生成的进程。