等级初学者。我对python中的线程创建方法感到困惑。具体来说,以下两种方法之间存在任何差异:
在第一种方法中,我正在使用import thread
模块,之后我正在使用此代码thread.start_new_thread(myfunction,())
创建一个线程,因为myfunction()没有任何参数。
在第二种方法中,我使用的是from threading import Thread
,之后我通过这样的方式创建线程:t = Thread(target=myfunction)
然后t.start()
我问的原因是因为我的程序适用于第二种方法,但是当我使用第一种方法时,它不能按预期工作。我正在开发一个Client-Server程序。感谢
代码如下:
#!/usr/bin/env python
import socket
from threading import Thread
import thread
data = 'default'
tcpSocket = ''
def start_server():
global tcpSocket
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpSocket.bind(('',1520))
tcpSocket.listen(3)
print "Server is up...."
def service():
global tcpSocket
(clientSocket,address) = tcpSocket.accept()
print "Client connected with: ", address
# data = 'default'
send_data(clientSocket,"Server: This is server\n")
global data
while len(data):
data = receive_data(clientSocket)
send_data(clientSocket,"Client: "+data)
print "Client exited....\nShutting the server"
clientSocket.close()
tcpSocket.close()
def send_data(socket,data):
socket.send(data)
def receive_data(socket):
global data
data = socket.recv(2048)
return data
start_server()
for i in range(2):
t = Thread(target=service)
t.start()
#thread.start_new_thread(service,())
答案 0 :(得分:2)
@immortal你能解释一下吗?我没抱歉。主线如何死?它应该在我的代码中启动service()然后服务器等待客户端。我想它应该等待而不是死。
您的主线程致电:
start_server()
然后返回。然后你的主线程执行:
for i in range(2):
t = Thread(target=service)
t.start()
#thread.start_new_thread(service,())
那些也几乎立即完成,然后你的主线程结束。
此时,主线程已完成。 Python输入其解释器关闭代码。
部分关闭代码是等待到.join()
由threading
模块创建的所有(非守护程序)线程。除非您确切知道自己在做什么,否则使用thread
会更好 的原因之一。例如,如果你是我;-)但我曾经使用thread
的唯一时间是在threading
的实现中,并为此编写测试代码thread
模块。
您完全靠自己来管理thread
模块线程生活的各个方面。 Python的关闭代码不会等待这些线程。解释器只是退出,完全忽略它们,并且操作系统将它们终止(好吧,这完全取决于操作系统,但在所有主要平台上,我知道操作系统只是在中途不合理地杀死它们。)