定期运行三个函数 - 多线程?多?

时间:2012-03-10 01:41:27

标签: python multithreading signals multiprocessing

我问了一个非常类似的问题earlier,但项目范围正在快速增长,超出了信号可以得到的地方(我认为)。基本上,我的程序将在三个不同的时间间隔内完成工作;每15秒一个功能,一个功能可配置间隔(一般为5到60秒),每小时或两个功能一个功能。

从直观的角度来看,似乎多个带有单独函数的signal.signal()调用不会让我走得太远:ITIMER_REAL计时器只发出一个信号 - SIGALRM,因此没有办法区分哪个itimer正在发出信号。由于15秒间隔函数需要运行而不管其他函数可能发生什么,这使我可以选择多线程或多处理。

我倾向于多处理,希望我能够产生三个子进程,每个进程都有自己的信号/ itimer间隔,让他们每个人都在闲暇时做他们的工作。这可行吗?如果没有,那么这三个函数以期望的间隔运行的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

这是可行的,但是如果三个循环没有进行任何繁重的计算(需要多核功能),你也可以启动三个线程。

或者,您可以让一个循环使用priority queue处理此问题。将(time, task)对推入队列,其中task是要完成的任务的某些描述。然后,循环:

  • 弹出一个项目
  • 等到指定的time到期
  • 执行任务
  • 通过将新项目推入队列,在5秒,15分钟,2小时等之后重新安排任务。