我有 3 個執行緒,, t1,t2和t3
我想每 N 分鐘啟動一次執行緒,例如
t1 should start randomly each [2, 4] min
t2 should start randomly each [10, 15] min
t3 should start randomly each [6, 9] min
這是我到目前為止所擁有的
def attack(number, driver, sleep_time):
# Do stuff here
sleep(randint(sleep_time[0], sleep_time[1]) * 60)
return attack(number, driver, sleep_time)
if __name__ == '__main__':
t1 = threading.Thread(target=attack, args=(1, driver, [2, 4]))
t2 = threading.Thread(target=attack, args=(2, driver, [10, 15]))
t3 = threading.Thread(target=attack, args=(3, driver, [6, 9]))
t1.start()
t2.start()
t3.start()
我對早期沒有問題,我的問題是長期(10 - 20 分鐘)
我不能讓t2或t3作業什么時候t1執行實際動作(不是睡眠時間)
所以,我不能使用join,因為我將不得不等待睡眠時間。
random如果我從attack函式中洗掉睡眠持續時間,我不知道如何參與。
問題:
有沒有比在內部attack函式中具有睡眠持續時間更好的方法?
有沒有辦法告訴其他執行緒,“正在執行操作等我去睡覺”
我想做的就是啟動所有與同一元素互動但不要同時作業的執行緒。
任何想法、建議或鏈接將不勝感激。
uj5u.com熱心網友回復:
有沒有更好的辦法...?
是的。將“執行緒”的概念與執行緒所做的作業分開。如果您不想擁有多個執行緒“在這里做事”,那么沒有理由擁有多個執行緒。
一根線可以;
- 為三項活動中的每一項選擇初始截止日期,
- 找出接下來要到期的活動(即找到到期日期的 min()),然后 sleep() 直到該活動到期,
- 做活動,
- 將適當的 random() 時間添加到剛剛執行的活動的截止日期,
- 并回傳第 2 步。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450269.html
標籤:python-3.x 多线程
上一篇:System.Threading.TimersTimerCallback事件處理程式中捕獲的例外,然后重新拋出未發送回主執行緒
