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