Python中的多线程套接字。我错过了一些东西

时间:2017-04-28 15:13:29

标签: python multithreading sockets global-variables

我在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)

1 个答案:

答案 0 :(得分:1)

target=ThreadedServer('',5050).listen())

应该是

target=ThreadedServer('',5050).listen)

因为你调用 listen函数而不是将它作为参数传递而冻结了。因为listen中有一个无限循环,所以线程永远不会启动,因为它正在等待函数返回一个值。