python结束当前进程ctrl_python结束当前进程ctrl_python multiprocessing 接收ctrl+C 杀死进程问题...

大致代码是这样的:

import time

import string

import os

import subprocess

import multiprocessing

import signal

def init_worker():

signal.signal(signal.SIGINT, signal.SIG_IGN)

def func(excuteCmd):

p = subprocess.Popen(excuteCmd, shell=True, stdout=subprocess.PIPE,stderr = subprocess.PIPE)

a = p.stdout.read()

p.wait()

return a

def main():

nodeList = ['node1', 'node2']

list = []

pool = multiprocessing.Pool(len(nodeList),init_worker)

try:

for i in range(len(nodeList)):

node = nodeList[i]

excuteCmd = 'ssh ' + node + 'XXXXXX'

result.append(pool.apply_async(func, (excuteCmd, )))

pool.close()

pool.join()

except KeyboardInterrupt:

print "Caught KeyboardInterrupt, terminating workers"

pool.terminate()

pool.join()

main()

这段代码大致写了下,但是现在我有一个命令excuteCmd,这个命令大概作用就是ssh到一个node上面执行一个命令,这个命令持续一分钟,然后取回显,也就是说,每次命令执行完成后有很多回显需要拿回。

所以我想做的就是并行去不同的node上执行命令,并把回显拿回。

这个思路和代码是没问题,但是ctrl+C会有时延,也就是说,如果我半路想取消,ctrl+C下去要过三四十秒才能结束,这是为什么呢?

我能想到的是node如果比较多,命令回显也比较多,ctrl+C的信号就会排队,要等排到才能执行,而不是立即执行,所以请大神赐教,有没有方法可以立即中断。

(如果是比较简单的命令就没问题,唯独ssh过去时间比较长的命令才会这样)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值