本文和大家分享的主要是Python手动中断多线程程序相关内容,一起来看看吧,希望对大家
学习python
有所帮助。
引
灵感来源依旧是爬虫框架项目 pycrawler ,爬虫作为子线程运行时不受键盘中断信号影响,Ctrl-C无法终止整个爬虫运行。另外的一个场景是多线程压力测试,需要提前终止的情况下,Ctrl-C依旧不能终止整个程序。除了简单粗暴的使用kill命令强行终止之外,本文将给出一个简单可行的解决方案。
值得注意的一点是,Python2、3两个版本在测试中的表现并不一致,所以使用两个版本分别进行测试。
博客原文
测试环境
· Python2 2.7.9
· Python3 3.4.2
· Mac OS X Yosemite 10.10.3
子线程类
import timefrom threading import Thread
class CountDown(Thread):
def __init__(self):
super(CountDown, self).__init__()
def run(self):
num = 100
print('slave start')
for i in range(10, 0, -1):
print('Num: {0}'.format(num/i))
time.sleep(1)
print('slave end')
失败情况一
主线程代码
if __name__ == '__main__':
print('main start')
CountDown().start()
引
灵感来源依旧是爬虫框架项目 pycrawler ,爬虫作为子线程运行时不受键盘中断信号影响,Ctrl-C无法终止整个爬虫运行。另外的一个场景是多线程压力测试,需要提前终止的情况下,Ctrl-C依旧不能终止整个程序。除了简单粗暴的使用kill命令强行终止之外,本文将给出一个简单可行的解决方案。
值得注意的一点是,Python2、3两个版本在测试中的表现并不一致,所以使用两个版本分别进行测试。
博客原文
测试环境
· Python2 2.7.9
· Python3 3.4.2
· Mac OS X Yosemite 10.10.3
子线程类
import timefrom threading import Thread
class CountDown(Thread):
def __init__(self):
super(CountDown, self).__init__()
def run(self):
num = 100
print('slave start')
for i in range(10, 0, -1):
print('Num: {0}'.format(num/i))
time.sleep(1)
print('slave end')
失败情况一
主线程代码
if __name__ == '__main__':
print('main start')
CountDown().start()