我在使用Python进行线程处理时,写了一个基本的即时通讯程序 [代码见底部]
注意到当我用C-c杀掉程序时,它并没有退出,而是一直挂起。
我猜测这是因为它在等待每个线程完成它们正在做的事情,但由于这是一个无限循环,这永远不会发生。
所以我想手动杀死每个线程,或者在接收到kill信号时结束循环。
怎么做呢?
# code for basic IM thingy
import threading
import time
def worker():
print "Worker thread started"
while True:
time.sleep(1)
print "Worker thread is still running"
t = threading.Thread(target=worker)
t.start()
while True:
pass
#!/usr/bin/env python
import threading
import socket
class Listen(threading.Thread):
def run(self):
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.bind(('', 2727))
conn.listen(1)
while True:
channel, details = conn.accept()
print str(details)+": "+channel.recv(250)
channel.send("got it")
channel.close()
class Shout(threading.Thread):
def run(self):
while True:
try:
address = raw_input("who u talking to? ")
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect((address, 2727))
break
except:
print "can't connect to "+ str(address)
while True:
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect((address, 2727))
conn.send(raw_input())
conn.close()
listen = Listen().start()
shout = Shout().start()