簡體   English   中英

僅當線程未針對 python 運行時,如何啟動線程

[英]How do I start a thread only if the thread is not running for python

我正在嘗試開始創建一個線程來運行一個進程(任務函數),但只有在線程尚未運行時才創建線程,並且只運行一次。 main.py 會定期刷新並觸發線程進程在后台運行。 這樣我就可以節省計算資源。 例如,如果用戶刷新我的頁面 3 次,該進程繼續運行 3 個線程,但我試圖這樣做它只在 10 秒內運行一次(在睡眠期間)。 我只需要第一次工作並觸發線程/任務並忽略后續觸發器。 我創建了一個我認為應該可以工作的腳本,但是每次 main() 運行時它都會運行任務,而它不應該運行。

我創建了一個嘗試,除了檢查 current_thread 是否存在,如果它存在則檢查它是否沒有使用 'is_alive()' 方法運行,如果不忽略(並且不繼續),如果它存在並且仍然“is_alive” ()”。 如果異常觸發,則 current_thread 不存在,腳本繼續啟動新線程 (current_thread)。 根據腳本中的邏輯,看起來 current_thread.is_alive() 不起作用,因為我有一個線程正在運行,但它仍在觸發新的 current_thread.start()。

import time
import threading

def task():
    print ('start task')
    time.sleep(10)
    print ('task complete')

current_thread = threading.Thread(target=task)

def main():

    try:
        if not current_thread.is_alive():
            current_thread.start()
            current_thread.join()
    except UnboundLocalError as e:
        current_thread.start()
        current_thread.join()
if __name__ == '__main__':
    main()

雖然我找到了一個相關的答案(它只在舊線程完成運行時運行一個新線程),但該腳本不是很有用,因為它無限運行,而我只希望線程運行一次。 python - 如果線程尚未運行,則啟動它

感謝您對我所缺少的內容或可以采取哪些措施來解決此問題的任何幫助。

只需使用 boolean 變量來跟蹤您是否已啟動線程。

import time
import threading

def task():
    print ('start task')
    time.sleep(10)
    print ('task complete')

def main():
    current_thread = threading.Thread(target=task)
    started = False
    for _ in range(12):
        if not started:
            started = True
            current_thread.start()
        time.sleep(1.0)
        print("Main loop...")
        
if __name__ == '__main__':
    main()

暫無
暫無

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

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