Python Web框架 + [a]sync任务;长轮询:非Django

3 投票
3 回答
2280 浏览
提问于 2025-04-16 18:25

我需要创建一个项目,这个项目要有一个网页前端,用来管理同步任务执行(就像fabric那样)、异步任务(AMQP),还有长轮询/ajax,用于查看结果和队列/大数据集(想象一下tail -f syslog的效果)。我已经有一部分用Python写的代码,可以用来实现很多具体的功能。

在看了很多现有的框架后,最明显的选择似乎是Django加Celery。不过,我并不想“学习Django”,而且我也不需要它95%的功能。我只需要简单的用户认证,也许还需要sqlalchemy,简单的ajax,amqp和xmlrpc会很有帮助。

我考虑过使用Mongrel2,但我更喜欢RabbitMQ而不是0MQ(因为一些具体实现的原因)。

我最开始花了很多时间学习Twisted,最后从中得到了几百行有用的代码,但我发现我不得不把太多的代码调整得适应它的回调模型。虽然它的确很合适(除了它自己的amqp实现),但这让我感到非常沮丧,我经历了很多次代码的迭代(每次都有新的“twisted ahah时刻”),所以现在完全不考虑它了。

有人能帮我理清思路吗?Tornado?Pylons?repoze?Pyramid?Flask?Bottle?CherryPy?Web2py?Paster/Webob?还有其他的选择吗?可以参考这个链接:http://wiki.python.org/moin/WebFrameworks

补充说明:

需要明确的是,和RabbitMQ(或其他amqp提供者)的集成是最重要的,这也是问题的关键所在。

3 个回答

-1

这里有几个建议。

CherryPy 是一个很棒的底层框架。它的功能不算很多,但提供了一种非常简单的方法,可以把http请求映射到函数调用上。

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

如果你的需求非常简单,普通的wsgi也是个不错的选择。虽然用它做简单的事情比用CherryPy或Web.py要复杂一些,但WSGI是最基础的,现在大多数网页框架都是建立在它之上的。

1

如果你打算长期使用AMQP,那我建议你不要用Celery,因为他们对AMQP的使用方式很奇怪,感觉开发者并没有真正理解AMQP的模型。

bottle是一个很不错的框架,适合快速搭建RESTful应用(我用它来创建测试用的模拟服务器),如果你已经有了处理实际工作的代码,你会惊讶于bottle应用可以写得多么简短。

我现在在用Python开发应用,使用RabbitMQ,并通过kombu来使用amqplib。最开始选择kombu是因为我想在将来可能更换库,比如用pika或其他的,但现在我希望当初就直接用amqplib,建立一个合适的Python风格的AMQP模型。

在你深入编码之前,花点时间去RabbitMQ的网站上看看关于AMQP的一些博客和幻灯片演示,这样你才能真正理解AMQP模型,否则会让自己变得更麻烦。

除非你必须和其他应用沟通,否则请不要使用xmlrpc。因为bottle让简单的RESTful应用变得非常简单,所以使用XMLRPC就显得多余复杂了。

2

我对Python的网页框架了解得不算全面,但想分享一下我对其中两个框架的看法:

  • Bottle框架很轻量,使用起来也不错。如果你想找一个简单易学、好上手的框架,这可能是个不错的选择。我用它做过一些简单的本地前端应用,感觉非常好。

  • Tornado在我看来是一个非常好的非阻塞服务器,适合实时网页应用。结合tornadio使用,可以很轻松地实现ajax长轮询。不过,它的学习曲线可能比Bottle稍微陡峭一些。我建议你看看tornadio示例文件夹里的聊天应用。

希望这些对你有帮助。

撰写回答