python结束线程_python原生结束线程的方法

Python的threading 本身没有提供.kill()方法来结束线程。但是只需要一个小小的变通就可以实现。

一个caller线程在里面调用需要控制时间的tHhandle线程并把tHhandle线程设置.setDaemon()方法为True。caller线程结束,tHandle线程就会跟着结束。

# encoding: UTF-8

import threading

import time

#完全原生强制结束python线程的方法。转载请注明来自博客园

def func(tHandle,timeout):

#caller 函数

print 'in time control.'

tHandle.setDaemon(True) #设置tHandle线程为daemon,关键地方!!

tHandle.start()# 让tHandle线程进入阻塞状态

tHandle.join(timeout) #tHandle 有timeout这么多秒的时间运行之后进入阻塞(也可以认为是挂起)

print 'out time control' #这句执行完毕后,由于tHandle线程是此线程的守护程序

#因此caller结束后tHandle也就结束了,从而达到kill tHandle线程的目的

def checkproxy(timewait,timewait2):

print 'in checkproxy.'

time.sleep(timewait)

time.sleep(timewait2)

print 'out checkproxy.' #这句在此例子里是不运行的,因为此句要在20+1=21秒之后运行,

#但是caller 只给了2秒时间运行,然后caller结束,此线程也要结束。所以运行不到

tcheck = threaking.Thread(target=checkproxy,args=(1,20,))

caller=threading.Thread(target=func,args=(tcheck,2,))

caller.start()

#运行结果:

#in time control.

#in checkproxy.

#out time control

#keywords:python 终止 超时 kill 杀死 线程 子线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值