python 等待线程结束_Python:如何停止等待.recv()的线程

两种解决方案:

1)不要停止线程,只允许它在进程退出时终止sys.exit()

2)以“立即模具”标志启动线程。Event类是专门为从另一个线程发出信号而设计的。在

下面的示例启动一个线程,该线程连接到服务器。任何数据都会被处理,如果父进程向线程发出退出的信号,它就会。作为一个附加的安全功能,我们有一个报警信号来杀死所有的东西,只是万一事情失控。在

来源import signal, socket, threading

class MyThread(threading.Thread):

def __init__(self, conn, event):

super(MyThread,self).__init__()

self.conn = conn

self.event = event

def handle_data(self):

"process data if any"

try:

data = self.conn.recv(4096)

if data:

print 'data:',data,len(data)

except socket.timeout:

print '(timeout)'

def run(self):

self.conn.settimeout(1.0)

# exit on signal from caller

while not self.event.is_set():

# handle any data; continue loop after 1 second

self.handle_data()

print 'got event; returning to caller'

sock = socket.create_connection( ('example.com', 80) )

event = threading.Event()

# connect to server and start connection handler

th = MyThread(conn=sock, event=event)

# watchdog: kill everything in 3 seconds

signal.alarm(3)

# after 2 seconds, tell data thread to exit

threading.Timer(2.0, event.set).start()

# start data thread and wait for it

th.start()

th.join()

输出

^{pr2}$

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值