我们正在为Python创建一些硬件的制造测试。我们有一个UI,用户将使用它来运行通过TCP Socket以Python编写的测试脚本。
现在我正在尝试编写一个同时运行循环的测试,该循环向硬件发送命令并运行一个循环,通过TCP连接侦听来自UI的交互(即用户单击“是”按钮) 。一旦从TCP连接收到消息,就会设置一些变量,然后从另一个循环中断发送命令到硬件。
现在,我们正在考虑使用MultiProcessing而不是MultiThreading,因为只有两个简单的循环,所以不会有太多的开销。因此,每个循环将在不同的过程中运行。
我的问题是:我可以在测试脚本中使用全局变量,该变量将由TCP循环过程设置,硬件循环过程可以检查并在设置全局变量时停止吗?
编辑:我们使用c#来编写UI,管理决定是将Python用于测试脚本,而不是将它们与UI捆绑到c#中。是否通过TCP连接使用Python与c#是最好的方法是在我的paygrade之外。答案 0 :(得分:0)
全局变量不会在进程间共享,但会被复制。这意味着他们都有自己的副本。如果第一个改变了它的价值,那么第二个赢了。
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()
这是一个非常简单的例子,我希望它能提出这个想法。