大佬教程收集整理的这篇文章主要介绍了python 多进程不能总是捕捉信号(ctrl+c),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有 8 个从一个父进程产生的子进程。 8 个子进程每个都有多个线程。我使用 for (int i = 0; i < 10; i++) {
g.drawoval(20 + inc,20 + inc,25 + len,25 + len);
inc = inc + 3;
len = len + 5;
}
在每个子进程中注册 signal.signal(signal.SIGINT,signal_hander)
函数。但是当我按下 signal_hander
时,有时只有一些子进程收到了信号,而其他的就挂了。为什么?以及如何确保所有进程都能接收到信号?
ctrl+c
这是运行进程池的示例,其中提交的每个任务都运行一个线程,该线程除了休眠 5 秒之外不做注意。一旦我确定 SIGINT 处理程序已经设置,我就输入 CTRL-C。一旦 sleep
完成,就会输出“接收信号”消息:
import signal
from multiprocessing import Pool
from threading import Thread
def signal_handler(signum,framE):
print(f'receive signal: {signum}')
def set_handler():
signal.signal(signal.SIGINT,signal_handler)
print('handler set')
def delay():
import time
time.sleep(5)
def worker(X):
t = Thread(target=delay)
t.start()
t.join()
return x ** 2
def main():
set_handler()
# initialize each process in the pool with the handler:
pool = Pool(2,initializer=set_handler)
print(pool.map(worker,(1,2)))
if __name__ == '__main__':
main()
以下是使用 Process
实例和多个线程而不是进程池的示例:
import signal
from multiprocessing import Process
from threading import Thread
def signal_handler(signum,signal_handler)
print('handler set')
def delay():
import time
time.sleep(5)
def worker(X):
set_handler()
threads = [Thread(target=delay) for _ in range(5)]
for t in threads:
t.start()
for t in threads:
t.join()
print(x ** 2)
def main():
set_handler()
procs = [Process(target=worker,args=(i,)) for i in range(1,9)]
for p in procs:
p.start()
for p in procs:
p.join()
if __name__ == '__main__':
main()
以上是大佬教程为你收集整理的python 多进程不能总是捕捉信号(ctrl+c)全部内容,希望文章能够帮你解决python 多进程不能总是捕捉信号(ctrl+c)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。