簡體   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