python如何让程序中断_如何中断python多线程应用程序?

我正在尝试运行以下代码(我简化了一点):

def RunTests(self):

from threading import Thread

import signal

global keep_running

keep_running = True

signal.signal( signal.SIGINT, stop_running )

for i in range(0, NumThreads):

thread = Thread(target = foo)

self._threads.append(thread)

thread.start()

# wait for all threads to finish

for t in self._threads:

t.join()

def stop_running(signl, frme):

global keep_testing

keep_testing = False

print "Interrupted by the Master. Good by!"

return 0

def foo(self):

global keep_testing

while keep_testing:

DO_SOME_WORK();

我希望用户按Ctrl C,程序将通过消息和中断来打印商品.但是,它不起作用.问题出在哪儿?

谢谢

解决方法:

与常规流程不同,Python似乎没有以真正的异步方式处理信号. “ join()”调用以某种方式阻止主线程,以防止其响应信号.我对此感到有些惊讶,因为我没有在文档中看到任何表明这种情况可能/应该发生的情况.但是,解决方案很简单.在主线程中,在线程上调用“ join()”之前添加以下循环:

while keep_testing:

signal.pause()

标签:multithreading,python,signals

来源: https://codeday.me/bug/20191209/2095855.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值