Python 定期运行三个函数-多线程?多重处理?

Python 定期运行三个函数-多线程?多重处理?,python,multithreading,signals,multiprocessing,Python,Multithreading,Signals,Multiprocessing,我曾问过一个非常类似的问题,但项目范围正在迅速扩大,超出了信号能给我的范围(我想)。基本上,我的程序将在三个不同的时间间隔内运行;每15秒一个功能,可配置间隔(一般为5至60秒)一个功能,每小时或两小时一个功能 从直观的角度来看,似乎使用单独函数调用多个signal.signal()不会让我走得很远:一个ITIMER\u REAL timer只发出一个信号——SIGALRM,因此无法区分哪个ITIMER发出信号。由于15秒间隔函数需要运行,而不管其他函数发生了什么,这就让我可以选择多线程或多处理

我曾问过一个非常类似的问题,但项目范围正在迅速扩大,超出了信号能给我的范围(我想)。基本上,我的程序将在三个不同的时间间隔内运行;每15秒一个功能,可配置间隔(一般为5至60秒)一个功能,每小时或两小时一个功能

从直观的角度来看,似乎使用单独函数调用多个signal.signal()不会让我走得很远:一个ITIMER\u REAL timer只发出一个信号——SIGALRM,因此无法区分哪个ITIMER发出信号。由于15秒间隔函数需要运行,而不管其他函数发生了什么,这就让我可以选择多线程或多处理


我倾向于多处理,希望我能产生三个子进程,每个子进程都有自己的信号/消息间隔,让它们在空闲时各自完成工作。这是否可行?如果不是,那么让这三个函数以所需的时间间隔运行的最佳方法是什么?

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

或者,你可以让一个循环用一个。将
(时间,任务)
对推送到队列上,其中
任务
是要完成的任务的一些描述。然后,在循环中:

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

我担心的是阻塞;其中一项任务涉及访问一个网站,如果该网站不可用,我不希望15秒间隔的任务因此而受阻。另外,我最初的想法是使用MP而不是MT,因为信号文档()表明,尝试从主线程以外的线程调用signal.signal()将引发错误。