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

时间:2016-09-01 20:53:54

标签: python multithreading sockets multiprocessing raw-sockets

我是Python的新手,并试图在工作中学习它#34;我需要这样做。

我需要使用原始套接字连接与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()要并行化。

4 个答案:

答案 0 :(得分:1)

如果你只有一个监听线程,你可以使用select来等待多个套接字,并在任何一个套接字返回数据时被唤醒:

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

答案 1 :(得分:0)

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

还有其他细节吗?

祝你工作顺利!

答案 2 :(得分:0)

查看asyncio模块。

它需要Python 3,但允许编写具有多个执行上下文的单线程应用程序 - 一种协作式多线程,其中仅在用户这样说时才切换上下文。你真的得到了最好的线程和基于事件的并发。

答案 3 :(得分:0)

使用This answer

threading实际上为我效劳了。