繁体   English   中英

在python中设置变量时,如何使一个多进程循环停止另一个?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM