首页 > 解决方案 > Python 网络线程

问题描述

好的,我想用 python 编写服务器。因此我打开了一个套接字并等待输入。当我得到一个输入时,我得到一个进一步的套接字和地址。

因为我想同时实现多个连接,所以我研究了 python 中的多线程。

我通过以下方式创建一个线程:

t = Thread(target=input, args=(conn, address, ))
t.start()

我的输入法如下所示:

def input(conn, address): [...]

现在,如果以这种方式我得到以下堆栈跟踪:

线程 Thread-1 中的异常:

回溯(最后一次调用):文件“/usr/lib/python3.8/threading.py”,第 932 行,在 _bootstrap_inner self.run()

文件“/usr/lib/python3.8/threading.py”,第 870 行,运行 self._target(*self._args, **self._kwargs)

TypeError:最多输入 1 个参数,得到 2 个

如果我删除地址(并且只给出 conn),它会打印以下内容:

<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('10.0.0.9', 3306), raddr=('10.0.0.9', 32908)>

我该怎么理解?

问题解决:我需要通过self.input调用方法而不是input。

标签: pythonmultithreading

解决方案


input 是一个内置的 python 函数,它有一个参数,所以当你试图在线程 python 中使用 input 时,假设你想使用内置的 input 函数。更改函数名称将解决问题:

def _input(conn, address): [...]


t = Thread(target=_input, args=(conn, address, ))
t.start()

PS:这种方式不是处理多线程网络的好方法


推荐阅读