我在python中学习使用多线程和套接字,所以如果我缺乏知识,我很抱歉...
我遇到了这个问题: 我从这个论坛中获取了这段代码,并尝试进行一些修改。
我想让主线程启动一个侦听连接的线程,并为每个连接启动一个新线程。
同时主线程必须做某事(在这种情况下打印globalVar)。每收到一条消息,globalVar都会增加1。
此代码的结果是:
Hi!
('192.168.2.226', 5601)
('192.168.2.226', 5601)
('192.168.2.226', 5601)
('192.168.2.226', 5601)
('192.168.2.226', 5601)
('192.168.2.226', 5601)
('192.168.2.226', 5601)
"你好!"字符串永远不会出现!并且globalVar根本没有印刷。 我错了什么?
这是代码:
import socket
import threading
globalVar = 0
class ThreadedServer(object):
global globalVar
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind((self.host, self.port))
def listen(self):
self.sock.listen(5)
while True:
client, address = self.sock.accept()
client.settimeout(60)
threading.Thread(target = self.listenToClient,args = (client,address)).start()
def listenToClient(self, client, address):
global globalVar
size = 1024
while True:
try:
data = client.recv(size)
if data:
# Set the response to echo back the recieved data
#response = data
print(address)
globalVar += 1
#client.send(response)
else:
raise error('Client disconnected')
except:
client.close()
return False
print("Hi!")
threading.Thread(target=ThreadedServer('',5050).listen()).start()
print("Hello!")
while True:
print(globalVar)
答案 0 :(得分:1)
target=ThreadedServer('',5050).listen())
应该是
target=ThreadedServer('',5050).listen)
因为你调用 listen
函数而不是将它作为参数传递而冻结了。因为listen
中有一个无限循环,所以线程永远不会启动,因为它正在等待函数返回一个值。