Python 安排线程

Python Schedule Threads

我有 3 个线程,t1t2t3

我想每 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 分钟)

我不能让 t2t3 工作 当 t1 正在执行实际操作时(不是睡眠持续时间)

所以,我不能使用 join,因为我必须等待睡眠时间。

如果我从 attack 函数中删除睡眠持续时间,我不知道如何让 random 参与进来。

问题:

有没有比在 attack 函数中设置睡眠持续时间更好的方法?

有没有办法告诉其他线程,“正在执行操作等我去睡觉”

我只想启动与同一元素交互的所有线程,但不要同时工作。

任何想法、建议或 link 将不胜感激。

Is there a better way...?

是的。将“线程”的概念与线程所做的工作分开。如果您不希望有多个线程“在这里做事”,那么就没有理由拥有多个线程。

一个线程可以;

  1. 为三个活动中的每一个选择初始 due-dates,
  2. 找出下一个到期的 activity(即找到 due-dates 的 min()),然后 sleep() 直到那个到期,
  3. 执行 activity、
  4. 为刚刚完成的 activity 添加适当的 random() 时间到 due-date,
  5. 然后返回到第 2 步。