当前位置:  开发笔记 > 编程语言 > 正文

关于Python/Django和消息队列的建议

如何解决《关于Python/Django和消息队列的建议》经验,为你挑选了3个好方法。

我在Django中有一个应用程序,需要在各种用例中向用户发送大量电子邮件.出于显而易见的原因,我不想在应用程序中同步处理此问题.

有没有人建议消息排队服务器与Python完美集成,或者他们已经在Django项目上使用过?我的堆栈的其余部分是Apache,mod_python,MySQL.



1> Van Gale..:

在您的特定情况下,它只是一个电子邮件队列,我将采取简单的方法并使用django-mailer.作为一个不错的方面,还有其他可插拔的项目,当他们在堆栈中看到它时,它们足够聪明,可以利用django-mailer.

至于更一般的队列解决方案,我还没有能够尝试其中任何一个,但这里有一个对我来说更有趣的列表:

    pybeanstalk/beanstalkd

    齿轮手的python接口(现在随着齿轮手的C版本的发布可能会更加有趣)

    memcacheQ

    跺脚

    芹菜


针对这种特殊需求,避免麻烦并使用django-mailer; 它很棒.+1
我现在正在试验http://pypi.python.org/pypi/celery/,它看起来非常好.

2> max..:

到目前为止,我没有找到任何"好"的解决方案.我有一些更严格的软实时要求(从标签纸板箱拍照)所以可能其中一种方法足够快.我假设电子邮件可以等几分钟.

由cron作业处理的数据库中的"待办事项列表".

数据库中的"待办事项列表"由守护程序永久监视.

使用自定义守护程序,该守护程序由Web服务器通过UDP数据包通知(在今天的生产中).基本上我自己的Queing系统带有用于处理队列的IP堆栈.

使用ActiveMQ作为消息代理 - 由于稳定性问题,这没有用.对我来说,Java守护进程通常有些丰满

在CouchDB中使用更新触发器.不错但更新触发器并不意味着要进行繁重的图像处理,所以不适合我的问题.

到目前为止,我还没有尝试过RabbitMQ和XMPP/ejabebrd来处理这个问题,但是我们列出了下一个要尝试的东西.RabbitMQ在2008年获得了不错的Python连接,并且有大量的XMPP库.

但是,您可能只需要在本地计算机上配置正确的邮件服务器.这可能允许您将邮件同步转储到本地邮件服务器中,从而使整个软件堆栈更加简单.


顺便说一句:我们现在正在生产中使用RabbitMQ,到目前为止它们都非常开心.

3> Gruff..:

Stompserver是一个不错的选择.它轻巧,易于安装,易于使用Django/python.

我们有一个在生产中使用stompserver的系统,用于发送电子邮件和异步处理其他作业.

Django将电子邮件保存到数据库,Django中的model.post_save处理程序向stompserver发送事件,stompserver将事件传递给执行异步任务(发送电子邮件)的使用者进程.

它可以很好地扩展,因为你可以在运行时添加消费者进程 - 两个消费者可以发送两倍的电子邮件,消费者可以在单独的机器上.一个轻微的复杂问题是每个消费者都需要自己的命名队列,因此Django需要知道有多少消费者可用,并以循环方式向每个队列发送事件.(两个听取同一队列的消费者都会得到每条消息=重复).如果您只想要一个消费者流程,那么这不是问题.

我们以前有一些进程可以连续轮询数据库以查找作业,但发现它为系统增加了很多负载,即使不需要处理任何内容也是如此.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有