gpt4 book ai didi

python socket监听器高负载

转载 作者:行者123 更新时间:2023-12-03 11:55:44 25 4
gpt4 key购买 nike

我有一个线程化的 Python 监听器,旨在读取、验证数据并将其写入文件。

到目前为止,我将它限制为只能处理 20 个并发连接,但现在我需要它来处理更多、数百个……也许是 1000 个。

数据的交换是客户端和服务器之间的一系列读写操作:
你好,用户名,密码,类别,多行文本,再见

每次操作之间有 1 秒的 sleep 时间。

这是显示其设计方式的示例代码。

  def handler(csock, caddr):
while 1:
# read hello
# send welcome

# read username
# send true/false

# read password
# send true/false

# read payload
# send true/false

# read bye
# send bye

# close connection
# write data to file

# Example how read and send are done
inc = csock.recv(1024)
csock.send(out)

serversocket = socket(AF_INET, SOCK_STREAM)
serversocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serversocket.bind(('', 50005))
serversocket.listen(20)

while 1:
csock, caddr = serversocket.accept()
threading.Thread(target=handler, args=(csock, caddr,)).start()

我的问题:

Python 是否能够在多达 1000 个并发连接的情况下正常运行?

如果我的代码设计足够可靠?

最佳答案

Python 线程被称为 Global Interpreter Lock 的东西锁定。 .这意味着任何由 python 解释器产生的线程都仍然在一个 main 下运行。线。它们不能是多线程的(至少在 vanilla python 中不是)。因此,在您的情况下,当您为每个连接生成一个线程时,它们仍然按顺序运行。

一种解决方法是 multiprocessing python的模块。

Python 也有一些 default modules帮助完成您的任务。

^^^这些直接映射到您为每个客户端分配线程/进程的想法。

还可以考虑查看 twisted ,一个第 3 方 python 库。

如果在 linux 上(我认为它也映射到 windows/mac),请考虑查找 select python中的语句。它(基本上)检查大量连接并返回等待输入/输出的连接。

关于python socket监听器高负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20329428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com