它可以分为两部分:一个线程用于每五分钟创建一次实时,一旦有新数据,数据将被发送到连接的套接字。
套接字连接在主线程中设置并由每个产生线程处理。以下代码给出了简要说明,目的是每隔五分钟将 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
函数应该只发送给定套接字上的数据并返回。
请注意,我还没有对代码进行测试,因此可能会有一些增强空间。