在 Python 2.x 中一次连接并处理多个原始套接字

Connect and handle multiple raw sockets at once in Python 2.x

我是 Python 的新手,正在努力学习 "on the job"。我必须这样做。

我需要通过原始套接字连接与 3 个服务器通信。我可以按顺序轻松地做到这一点。但我想知道是否有一种方法可以同时与这 3 个服务器通信?所有 3 个服务器都有不同的 IP 地址。

基本上尝试执行以下操作,但只需一步:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST1, PORT1))
s.connect((HOST2, PORT1))
s.connect((HOST3, PORT1))

稍后还需要 s.sendall() & s.recv() 进行并行化。

如果你只有一个监听线程,你可以使用 select 等待多个套接字并在其中任何一个 return 数据:

时被唤醒

https://docs.python.org/2/library/select.html

如果不了解有关您的服务器协议、您正在侦听的内容以及您打算用它做什么等的更多信息,就很难规定丰富的知识,但我可以想象,没有其他附加信息,通信由 multiprocessing.Pool(3) 处理的场景,其中池的每个成员都映射到一个 IP 地址,并且所有三个都将数据发送到正在评估的同一个 multiprocessing.Queue ()通过循环线程。

还有其他详细信息吗?

祝你工作顺利!

看看 asyncio 模块。

它需要 Python 3,但允许编写具有多个执行上下文的单线程应用程序 - 一种协作式多线程,其中只有在用户要求时才切换上下文。您真正充分利用了线程和基于事件的并发性。

This answer using threading 实际上对我有用。