我在此代码中使用套接字与其他机器连接。我想从其他机器获取消息时终止线程但是如何在Python中终止线程? 我引用了许多SO问题,我发现python中没有关闭线程的方法。任何人都可以告诉我关闭线程的替代方法吗?
码
from threading import Thread
import time
import socket
def background(arg):
global thread
thread = Thread(target=arg)
thread.start()
def display():
for i in range(0,20):
print(i)
time.sleep(5)
background(display)
s = socket.socket()
s.bind((ip,6500))
s.listen(5)
print("listening")
val,addr = s.accept()
cmd = val.recv(1024)
if cmd == "Terminate Process":
print("Connected")
thread.close()
print("Process Closed")
错误:
AttributeError: 'Thread' object has no attribute 'close'
答案 0 :(得分:3)
经验法则是:不要杀死线程(请注意,在某些环境中,这甚至可能无法实现,例如标准C ++ 11线程)。让线程获取信息并终止自身。控制来自其他线程的线程会导致难以维护和调试代码。
E.g。
SHOULD_TERMINATE = False
def display():
for i in range(0,20):
print(i)
time.sleep(5)
if SHOULD_TERMINATE:
return
thread = Thread(target=display)
thread.start()
// some other code
if cmd == "Terminate Process":
SHOULD_TERMINATE = True
thread.join()
这当然是大大简化了。您的代码可以使用event objects(而不是.sleep
)或线程池进一步细化。