Python Web框架+异步任务;长轮询:非Django

3
我需要创建一个项目,其中包含一个Web前端来管理同步任务执行(类似于fabric),异步任务(AMQP)和长轮询/ajax以查看结果和队列/大型、经常更改的数据集(类似于tail -f syslog)。我有现有的Python代码库用于实现特定的内容。
在查看了许多现有框架之后,显然的答案似乎是Django+Celery。但是,我不想“学习Django”,也不需要其95%的功能。我只需要简单的身份验证,可能需要sqlalchemy,易于ajax,amqp,xmlrpc会很有帮助。
我会考虑使用Mongrel2,但我强烈偏好RabbitMQ而不是0MQ(出于一些特定的实现原因)。
我最初花费了很多时间学习Twisted,并最终从中获得了几百个有用的LOC,但我发现我扭曲了(哈哈)太多平台代码以适应它的回调模型。它实际上非常符合要求(除了它自己的amqp实现),但它太令人沮丧了,我经历了很多代码迭代(每个“扭曲的时刻”都有一个),所以完全放弃了。
请问有人能帮我解决这个问题吗?Tornado?Pylons?repoze? Pyramid?Flask?Bottle?CherryPy?Web2py?Paster/Webob?还有其他的吗?请参阅http://wiki.python.org/moin/WebFrameworks
编辑:
明确表示,与RabbitMQ(或另一个amqp提供者)的集成是至关重要的,并且实际上是问题的关键。

Twisted是你提到的所有选项中最合适的。这种并发管理正是它的用途。你因为已经学会了如何使用它而将其淘汰似乎有些奇怪。 - Jean-Paul Calderone
我希望你会错过这个问题,JP ;) 你的教程对我学习Twisted非常有帮助,并且显著提高了我的Python编程水平。但是,当我遇到@inlineCallbacks/yield时,我感到非常沮丧,因为我已经写了几周的代码,最终不得不全部放弃。我只好关闭Eclipse去喝酒了。此外,整个divmod问题让我感到担忧,就Twisted的持久性而言;我不需要使用最新最好的[g]event[let]异步库,但我需要确保我的大量时间投资不会被浪费。你认为呢? - mikewaters
3个回答

2
我对Python Web框架的整体了解不够,但我想分享一下我对其中两个框架的看法:
  • Bottle轻便易用。如果你想学习和使用容易的东西,那它可能是一个不错的选择。我用它来运行本地的相当简单的前端应用程序,非常喜欢。

  • Tornado在我看来是一个非常好的非阻塞服务器,适用于实时Web应用程序。与tornadio结合使用可以使Ajax长轮询变得非常容易。然而,它可能比Bottle难学一些。我建议在tornadio的示例文件夹中查看聊天应用程序。

希望这可以帮到你。


1

如果您长期使用AMQP,则我建议避免使用Celery,因为他们以奇怪的方式使用AMQP,这表明开发人员并不理解AMQP模型。

bottle是一个很好的框架,可以轻松创建RESTful应用程序(我用它来创建测试用的模拟服务器),如果您已经有了实际工作所需的代码,您可能会惊讶于bottle应用程序可短多少。

我目前正在使用RabbitMQ构建Python应用,并通过kombu使用amqplib。我最初选择kombu是以防我想要切换库并使用pika或其他库,但现在我希望我只是使用amqplib并在其上构建了一个适当的Pythonic AMQP模型。

在深入编码之前,请花些时间在RabbitMQ网站上阅读一些有关AMQP的博客和幻灯片演示,否则您将无法真正理解AMQP模型,并使自己更难。

除非必须与其他应用程序通信,请不要使用xmlrpc。Bottle使得简单的RESTful应用程序如此简单,以至于XMLRPC只是不必要的复杂性。


-1

几个建议。

CherryPy 是一个很棒的低级框架。它并不提供很多功能,但是它提供了一个非常简单的系统来将 HTTP 请求映射到函数调用。

web.py 是另一个非常轻量级且易于使用的框架。它比 CherryPy 更全面,包括模板和其他功能。

如果您的需求非常简单,那么纯 wsgi 也不是一个坏选择。相对于 CherryPy 或 Web.py 来说,它更复杂一些。WSGI 是最低公共分母,现在大多数 Web 框架都是基于它构建的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接