Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python侦听不同线程中的端口_Python_Multithreading_Port_Listen - Fatal编程技术网

Python侦听不同线程中的端口

Python侦听不同线程中的端口,python,multithreading,port,listen,Python,Multithreading,Port,Listen,我想使用python3.*创建多个端口的侦听器。我在utils.py中有这个代码 def listenPort(port): global conn conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) conn.bind(("", port )) conn.listen(5) #now keep talking with the client while 1: #wait

我想使用
python3.*
创建多个端口的侦听器。我在utils.py中有这个代码

def listenPort(port):
    global conn
    conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    conn.bind(("", port ))
    conn.listen(5)
    #now keep talking with the client
    while 1:
        #wait to accept a connection - blocking call
        c, addr = conn.accept()
        print('Connected with ' + addr[0] + ':' + str(addr[1]))
这是另一个文件的调用

socket_thread = threading.Thread(target=utils.listenPort, args=( globals.listenPort_first , ))
socket_thread.start()
我在单线程中工作。但现在我有以下多线程代码:

import utils

def start_func1():    
    socket_thread = threading.Thread(target=utils.listenPort, args=( 1998 , ))
    socket_thread.start()
    # do stuff

def start_func2():    
    socket_thread = threading.Thread(target=utils.listenPort, args=( 1999 , ))
    socket_thread.start()
    # do stuff

if __name__ == '__main__':

    first_thread = threading.Thread(target=start_func1)

    second_thread = threading.Thread(target=start_func2)

    first_thread.start()
    second_thread.start()
在这种情况下,我得到了一个错误:

 Exception in thread Thread-8:
Traceback (most recent call last):
  File "C:\Python32\lib\threading.py", line 740, in _bootstrap_inner
    self.run()
  File "C:\Python32\lib\threading.py", line 693, in run
    self._target(*self._args, **self._kwargs)
  File "D:\workspace\daemon-biotrack\utils.py", line 296, in listenPort
    conn.bind(("", port ))
socket.error: [Errno 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
通常只允许一个人使用套接字地址(协议/网络地址/端口)


有人遇到过这个问题吗?如果您知道任何解决方案,请与我分享。我找到了。但似乎,
SocketServer
已被删除。

在调用
conn.bind()
之前添加一个
print(port)
-我怀疑您错误地从多个线程传递了
globals.listenPort\u。另外,
global conn
在多线程情况下是错误的-您希望
conn
是一个局部变量或至少是一个每线程变量。
global con
确实是问题所在。删除该行。我删除了
global conn
,之后该错误只得到一次。在它到达mutch时间之前,我调用了多少个
listenPort
我无法重现此错误。外面少了什么东西吗?