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

标签 python multithreading tcp multiprocessing

我们现在正在使用 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/

相关文章:

c++ - 为什么冗余的额外作用域 block 会影响 std::lock_guard 行为?

java - Aerospike Java 客户端处理多个并发请求

c++ - 即使我安装了正确的 libprotoc 版本,也会看到 libprotobuf FATAL 错误

python - 使用不正确的文件扩展名将图像读入 pygame

python - 你能阻止函数在 python 的字典映射中执行吗?

python - 在 Flask 中是否有一种方法可以忽略对不存在的路由的请求

python - json.dumps 和 json.load 有什么区别?

multithreading - 多线程模型之间的差异

java - Tcp 连接另一个 android 设备,基于电话 # 而不是 IP?

Java TCP/IP 套接字发送字节对齐数据