gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:54:10 25 4
gpt4 key购买 nike

我们现在正在使用 Python 为一些硬件创建制造测试。我们有一个 UI,用户将使用该 UI 通过 TCP 套接字运行用 Python 编写的测试脚本。

现在我正在尝试编写一个测试,它同时运行一个循环,该循环向硬件发送命令,并运行一个循环,通过 TCP 连接监听来自 UI 的交互(即用户单击"is"按钮) .一旦从 TCP 连接接收到消息,将设置一些变量,然后从另一个循环向硬件发送命令。

现在,我们正在考虑使用 MultiProcessing 而不是 MultiThreading,因为只有两个简单的循环,不会有太多的开销。因此每个循环将在不同的进程中运行。

我的问题是:我能否在测试脚本中使用一个全局变量,该变量将由 TCP 循环进程设置,硬件循环进程可以检查并在设置全局变量时停止?

编辑:我们正在使用 c# 编写 UI,使用 Python 进行测试脚本是一项管理决策,而不是将它们与 UI 一起集成到 c# 中。通过 C# 的 TCP 连接使用 Python 是否是最好的方法不在我的薪水范围内。

最佳答案

全局变量不会跨进程共享,但会被复制。这意味着他们都将拥有自己的副本。如果第一个更改其值,则第二个不会。

Python 允许并发/并行循环相互通信的最简单方法是使用消息队列。

multiprocessing Queue是你想要使用的:

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()

这是一个非常简单的例子,我希望它能给出思路。

关于python - 当在 python 中设置变量时,如何使一个多进程循环停止另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32997684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com