我有一个由 Apache 提供的 Pylons Web 应用程序(mod_wsgi,prefork)。由于 Apache,有多个单独的进程同时运行我的应用程序代码。我希望将应用程序的一些非关键任务推迟到后台处理,以提高“实时”响应时间。所以我在考虑任务队列,许多 Apache 进程向这个队列添加任务,一个单独的 Python 进程一个接一个地处理它们并从队列中删除。
队列最好保存在磁盘上,这样排队的未处理任务就不会因为断电、服务器重启等而丢失。问题是什么是实现这种队列的合理方法?
至于我尝试过的事情:我从简单的 SQLite 数据库和用于存储队列项目的单个表开始。在负载测试中,当提高并发级别时,正如预期的那样,我开始收到“数据库锁定”错误。快速的解决方法是用 MySQL 替换 SQLite——它可以很好地处理并发问题,但对于我需要做的简单事情来说感觉有点矫枉过正。与队列相关的数据库操作也在我的分析报告中突出显示。