如何每五分钟并行地向多个客户端发送数据

时间:2015-07-22 02:44:23

标签: python multithreading python-2.7 sockets multiprocessing

它可以分为两部分:一个线程用于每五分钟创建一次实时,一旦有新数据,数据将被发送到连接的套接字。

套接字连接在主线程中设置并由每个产生线程处理。以下代码给出了简要说明,目的是每隔五分钟将 glb_data 的值发送到所有这些连接的套接字。

{{1}}

问题列举如下:

  1. 如何获取所有套接字连接,并调用send_data函数 在spawn线程中运行。就像观察者模式一样,它将是完美的。
  2. 如何确保每个帖子都收到了最新的glb_data。

1 个答案:

答案 0 :(得分:0)

为了保证每个线程都及时发送了最新的glb_data,您必须知道发送数据永远不会花费五分钟或更长时间,否则您将不得不处理这种情况。

基本上有两种方法可以做到这一点。一种是为每个套接字创建一个线程,并让它们等待来自主线程的信号发送数据,另一个是在主线程决定发送数据时创建线程。如果您知道在下一个数据可用之前发送数据将完成,或者您可以在新数据可用时中止发送旧数据(取决于操作系统行为),则第二种解决方案最直接,如果您另一方面需要将数据排入队列数据如果旧数据尚未完成发送,您可能希望使用第一个解决方案。

由于第二个解决方案很简单,我选择概述它。

def main_loop():
    while True:
        data = generate_data()
        if not data:
            break
        for s in sockproc:
             if hasattr(sockproc, "process") and sockproc.process.is_alive():
                  sockproc.process.terminate()
             sockproc.process = Process(target = send_data, args=(sockproc.socket, data))
             sockproc.run()
        sleep(300)

其中sockproc是一个对象数组,最初属性socket是有问题的套接字 - 此外,属性process将填充相应的进程。 send_data函数应该只发送给定套接字上的数据并返回。

请注意,我还没有对代码进行测试,因此可能会有一些增强空间。