【问题标题】:Is it ok to use Pika BlockingConnection in web app?可以在网络应用程序中使用 Pika BlockingConnection 吗?
【发布时间】:2014-07-30 22:29:58
【问题描述】:

我对@9​​87654321@ 和AsyncoreConnection 有点困惑。我想从 Django 应用程序向 RabbitMQ 队列发送一些消息。使用全局 BlockingConnection 对象可以做到这一点吗?

谢谢。

【问题讨论】:

    标签: python django rabbitmq pika blockingcollection


    【解决方案1】:

    每个线程需要有一个BlockingConnection 对象,如pika FAQ 中所述:

    Pika 在代码中没有任何线程概念。如果你想 使用带线程的 Pika,确保每个都有 Pika 连接 线程,在该线程中创建。分享一只鼠兔是不安全的 跨线程连接。

    因此,答案取决于您如何部署 Django。如果在多线程部署中使用 Django,则不能使用全局 BlockingConnection;您需要为每个线程创建一个。如果您不使用多线程,则可以使用全局 BlockingConnection 对象。

    【讨论】:

    • 我不使用显式线程,而是使用 uWSGI 和标志部署 django:enable-threads = trueprocess = 8。我应该为每个请求创建连接吗?在同步应用程序中使用pika.SelectConnection 是否有意义?
    • @User 我认为通过这些设置,您将获得 8 个单线程进程,因此您应该能够使用全局 BlockingConnection。使用SelectConnection 没有意义,因为您没有在应用程序中使用事件循环。另外,由于您只是使用BlockingConnection 来发布消息(而不是使用它们),因此您不应该长时间阻塞 RabbitMQ 调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多