我在 python 中使用多個執行緒。
一個執行緒將恰好在 1 分鐘頻率后運行。另一個將在每 2 分鐘后運行。10 分鐘后將再運行一個。
第一個和第二個假設每 2 分鐘一起開始。但我希望其中一個先運行。
同樣,每 10 分鐘,所有這些將同時運行。但我正在尋找第一個首先開始,第二個開始第二個和第三個最后開始的頻率,每 10 分鐘一次。
那么在多執行緒的情況下是否可以具有執行緒優先級?
uj5u.com熱心網友回復:
執行緒并不真正應該為您提供有關執行順序的任何保證。您有幾個選項可以自己定義它:
描述主執行緒中的序列
如果你目前有類似的東西
def target1():
target1_start()
target1_body()
def target2():
target2_start()
target2_body()
def main():
thread1 = Thread(target=target1)
thread2 = Thread(target=target2)
將其更改為
def main():
target1_start()
thread1 = Thread(target=target1_body)
target2_start()
thread2 = Thread(target=target2_body)
使用全域變數破解
def target1():
nonlocal thread1_started
target1_start()
thread1_started = True
target1_body()
def target2():
nonlocal thread1_started
while not thread1_started:
time.sleep(0.1)
target2_start()
target2_body()
def main():
thread1_started = False
thread1 = Thread(target=target1)
thread2 = Thread(target=target2)
但這非常難看,如果可能,我建議使用第一個選項
uj5u.com熱心網友回復:
不,python 中沒有執行緒優先級,但是您可以創建多個執行緒并讓它們 time.sleep(),并使用計時器事件來計時您在其他執行緒上的代碼執行時間。
# this makes program execute after an interval
from time import time, sleep
def work_once(time_seconds):
sleep(time_seconds) # run after time_seconds seconds.
# thing to run after time_seconds.
# this makes program sleep in intervals
from time import time, sleep
def work_interval(time_seconds):
while True:
sleep(time_seconds - time() % time_seconds) # run every time_seconds seconds.
# thing to run every time_seconds.
并在實體化執行緒時讓主執行緒將時間作為引數傳遞。
from threading import Thread
worker = Thread(work_interval,args=(2))
worker.start()
如果一個事件必須在另一個事件之后運行,您可以使用互斥鎖,但請確保您不會以死鎖告終。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383616.html
上一篇:Java更改特定日期的日期格式
下一篇:執行緒池未完成所有任務