[英]How can I make one multiprocessed loop stop another when a variable is set in python?
我们现在正在使用Python为某些硬件创建制造测试。 我们有一个用户界面,用户将使用该用户界面通过TCP套接字运行以Python编写的测试脚本。
现在,我正在尝试编写一个测试,该测试同时运行一个循环,该循环向硬件发送命令,并运行一个循环,该循环侦听来自TCP上来自UI的交互(即用户单击“是”按钮)。 从TCP连接接收到消息后,将设置一些变量,该变量将从另一个循环中断开,从而将命令发送到硬件。
现在,我们正在考虑使用MultiProcessing而不是MultiThreading,因为不会有太多开销,因为只有两个简单的循环。 因此,每个循环将在不同的过程中运行。
我的问题是:我可以在测试脚本中使用一个全局变量,该脚本由TCP循环进程设置,硬件循环进程可以对其进行检查并在设置了全局变量时将其停止?
编辑:我们正在使用c#编写UI,并且管理决策是将Python用于测试脚本,而不是将它们与UI捆绑在一起。 最好的方法是通过c#在TCP连接上使用Python是否是最好的方法。
全局变量不会在进程之间共享,但会重复。 这意味着他们都将拥有自己的副本。 如果第一个更改其值,则第二个不会更改。
Python允许并发/并行循环相互通信的最简单方法是使用消息传递队列。
您想使用多处理队列 :
from queue import Empty
from multiprocessing import Process, Queue
def process1(queue):
while 1:
try:
message = queue.get(block=False)
if message == "you must stop my dear":
return
except Empty:
do_your_job()
def process2(queue):
do_something()
queue.put("you must stop my dear")
q = Queue()
p1 = Process(target=process1, args=(q, ))
p2 = Process(target=process2, args=(q, ))
p1.start()
p2.start()
这是一个非常简单的示例,我希望它能给出想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.