是否可以在恒定时间内向多个接收套接字发送一条消息?

时间:2018-09-07 06:25:57

标签: python python-multithreading python-asyncio

这在一般方面来说更多,但是最近我需要通过python中的UNIX域套接字将通过WebSocket API接收到的许多消息发送到多个子进程。纯线程是不可替代的选择,因为我需要真正的并发(希望我不会将其与并行性混淆),因此仅保留进程。与让所有进程仅在自己的套接字上进行侦听相比,在主进程和子进程之间共享内存会带来更大的开销。

该过程如下:

  1. 主进程中的线程侦听传入的WebSocket消息并将其放入队列
  2. 主进程忙于旋转并检查队列中是否有新消息,如果有,则将其发送到多个(大约3-4个)子进程。

分析完上面的脚本后,我发现每个子进程发送消息大约需要3毫秒。考虑到需要高吞吐量,我宁愿每个消息等待3毫秒,而不是3个子进程的9毫秒。这段时间是否有可能从O(n)减少到O(1)?

到目前为止,我只想到了异步,但是我想尽可能不使用它。

1 个答案:

答案 0 :(得分:1)

如果您可以创建一组固定的子进程,即一个组有3 / n个进程,然后选择一个组并转发给所有进程,则可以考虑为每个子进程集使用一个多播IP /套接字。

或者如果子处理开销不是很在意,则可以使所有子进程在同一个多播组上进行侦听,这意味着所有子进程都从主进程获取所有消息并检查message参数以确定该消息是否针对该消息。是否。

多播IP进行第2层广播,因此数据包仅在网络上发送一次,并且多播组中的所有套接字同时读取同一消息。