除了运行无限循环之外,是否有其他机制来创建长时间运行的进程?
常见的模式似乎是这样的:
while True:
# Check for some condition or waiting for some event
# Do some processing
time.sleep(0.01)
我对进程充当侦听某些事件(例如等待任务队列)的工作线程的场景特别感兴趣。
替代方法的性能特征是什么?
关于"等待和处理作业"的现有技术已经通过几种不同的方式完成:
- 工作进程或线程(有关一些有用的基元,请参阅
multiprocessing
和threading
) - 基于事件的处理(异步、扭曲和其他一些)。异步 IO 库在获取有关 STDIN 或所选任何管道的数据时引发事件。
- 使用 IO 缓冲区的单线程。根据所需的负载特征,工作进程只等待 IO 并在 IO 到来时对其进行处理可能是合理的。没有花哨的排队。只需让内核在 IO 和调用进程块已满时缓冲它。
如果您预计许多长时间运行的任务(并在更多机器上扩展)需要性能,那么像 Celery 这样更高级的系统可能适合:
"芹菜是一个简单、灵活和可靠的分布式系统,可以 处理大量消息,同时提供 维护此类系统所需的工具。这是一个具有焦点的任务队列 实时处理,同时还支持任务调度。