gpt4 book ai didi

python - 使用 python/mod_wsgi 的多个生产者、单个消费者

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:00 24 4
gpt4 key购买 nike

我有一个由 Apache(mod_wsgi、prefork)提供服务的 Pylons Web 应用程序。由于 Apache,有多个单独的进程同时运行我的应用程序代码。我希望推迟应用程序执行的一些非关键任务在后台处理,以缩短“实时”响应时间。所以我想到了任务队列,许多 Apache 进程将任务添加到该队列,一个单独的 Python 进程逐一处理它们并从队列中删除。

队列最好保存到磁盘,这样排队的未处理任务就不会因为断电、服务器重启等而丢失。问题是实现这种队列的合理方法是什么

至于我尝试过的事情:我从简单的 SQLite 数据库和其中用于存储队列项目的单个表开始。在负载测试中,当增加并发级别时,我开始收到“数据库锁定”错误,正如预期的那样。快速而肮脏的修复方法是用 MySQL 替换 SQLite ——它可以很好地处理并发问题,但对于我需要做的简单事情来说感觉有点大材小用了。与队列相关的数据库操作也在我的分析报告中突出显示。

最佳答案

像 Apache 那样的消息代理 ActiveMQ是一个理想的解决方案。

管道可能如下:

  • 负责处理 HTTP 请求的应用进程快速生成回复,并将低优先级、繁重的任务发送到 AMQ 队列。
  • 订阅一个或多个其他进程来使用 AMQ 队列并执行这些繁重任务的预期操作。

队列持久性的要求是开箱即用的,因为 ActiveMQ 存储尚未在持久性存储中消费的消息。此外,它的扩展性非常好,因为您可以在不同的机器上自由部署多个 HTTP 应用程序、多个消费者应用程序和 AMQ 本身。

我们在用 Python 编写的项目中使用类似的东西,利用 STOMP作为底层通信协议(protocol)。

关于python - 使用 python/mod_wsgi 的多个生产者、单个消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2432956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com