![](/img/trans.png)
[英]Multithreading - Alternating between two threads using Conditions and Events in 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.