簡體   English   中英

使用python在兩個線程之間等待

[英]Wait in between two threads using python

需要知道我是否可以保留線程一段時間以繼續執行操作並恢復線程。

例如:

具有執行一些動作的線程1和具有類似於執行線程2的線程的線程1正在執行一些動作並啟動兩個線程。

如果Thread1在某點上失敗,則我需要暫停Thread2並繼續執行操作,如果該操作為true,則應繼續執行Thread2並在其所處位置運行代碼。

歡迎您的回答!

您不能暫停不合作的線程。 不過,您也許可以添加一些合作。 如果您的線程是一個循環,則可以使用鎖模擬停止信號:

foo = threading.Lock()

def thread1():
    while True:
        with foo:
            ... do whatever the thread does...


def thread2():
    while True:
        try:
            do whatevet the thread does
        except MyHorribleException:
            with foo:
                ... do remedial actions with thread1 "paused"...

需要注意的是,如果線程1長時間持有該鎖,則線程2會阻塞異常處理,直到該鎖可用為止。 根據您的程序邏輯,這可能會創建一個死鎖(線程1保留鎖,無法繼續,等待線程2修復問題,但線程2由於線程1持有它而無法獲取該鎖)。

但是,這將確保無論何時采取“補救措施”,線程1都不會處理數據。 如果您的線程中有快速的處理循環,並且不需要用thread2來解決thread1迭代中的持續性問題,這可能就足夠了。

如果不合適,那么至少在Unix平台上使用多處理可能會更好。 如果您不是創建線程而是子進程,則可以向其發送STOP信號,以使其停止在其軌道上,並且在准備進行操作時,將其發送為CONT。 如果您使用的是Windows,則可能無法使用。

您可能還需要考慮重新設計程序邏輯。 通常,線程適用於獨立處理。 如果兩個線程需要串聯,停止並繼續執行,那么最好將這些線程交織在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM