python中的任务队列进程

时间:2010-08-09 10:14:20

标签: python queue task

任务是: 我有任务队列存储在db中。它成长。当我有资源时,我需要通过python脚本解决任务。我看到两种方式:

  1. python脚本一直在工作。但我不喜欢它(理由是内存泄漏)。

  2. 由cron调用的python脚本并完成一部分任务。但我需要解决内存中一个工作活动脚本的问题(防止活动脚本计数增长)。在python中实现它的最佳解决方案是什么?

  3. 要解决这个问题的任何想法吗?

3 个答案:

答案 0 :(得分:1)

这是一个模糊的问题。你应该记住的一件事是,由于自动垃圾收集,在Python中泄漏内存非常困难。 <{1}}使用Python脚本处理队列并不是很好,尽管它可以正常工作。

我会使用方法1;如果您需要更多功能,可以创建一个小型Python进程来监视数据库队列并启动新进程来处理任务。

答案 1 :(得分:1)

您可以使用锁定文件来防止多个脚本耗尽cron。请参阅之前问题“Python: module for creating PID-based lockfile”的答案。实际上,对于你需要确保不会运行多个实例的任何事情来说,这实际上只是一个很好的实践,所以你应该调查它,即使你确实有不断运行的脚本,我

对于大多数事情,它应该不会太难以避免内存泄漏,但如果你遇到很多麻烦(我有时会使用复杂的第三方Web框架,例如,我建议用一个小的,精心设计的主循环编写脚本,监视数据库中的新作业,然后使用multiprocessing module分叉新进程来完成每个任务。

当任务完成后,子进程可以退出,立即释放任何未正确收集垃圾的内存,主循环应该足够简单,以避免任何内存泄漏。

如果您的系统有多个CPU内核,或者您的任务花费大量时间等待I / O,这还提供了并行运行多个任务的优势。

答案 2 :(得分:1)

我建议使用Celery,这是我自己使用的异步任务排队系统。

对于您的用例来说,这似乎有点沉重,但是如果/需要的话,可以通过添加更多的工作资源来轻松扩展。