pythonweb框架&x2B;[a] 同步任务;长轮询:不是Django

pythonweb框架&x2B;[a] 同步任务;长轮询:不是Django,python,frameworks,amqp,Python,Frameworks,Amqp,我需要创建一个项目,该项目有一个web前端来管理同步任务执行(ala fabric)、异步任务(AMQP)和长轮询/ajax,用于以表格形式查看结果和队列/大型频繁更改的数据集(想想tail-f syslog)。我有一个现有的Python代码库,用于许多特定于实现的东西 在查看了大量现有框架之后,最明显的答案似乎是Django+Cellery。然而,我不想“学习Django”,也不需要它95%的功能。我只需要简单的身份验证,也许sqlalchemy、EasyAjax、amqp和xmlrpc会有所

我需要创建一个项目,该项目有一个web前端来管理同步任务执行(ala fabric)、异步任务(AMQP)和长轮询/ajax,用于以表格形式查看结果和队列/大型频繁更改的数据集(想想
tail-f syslog
)。我有一个现有的Python代码库,用于许多特定于实现的东西

在查看了大量现有框架之后,最明显的答案似乎是Django+Cellery。然而,我不想“学习Django”,也不需要它95%的功能。我只需要简单的身份验证,也许sqlalchemy、EasyAjax、amqp和xmlrpc会有所帮助

我会考虑使用MangeR2,但是我对RabBMQ有很强的偏好超过0MQ(有几个具体的实施原因)。 我最初花了大量时间学习Twisted,最终从中获得了几百个有用的LOC,但我发现我扭曲(lol)了太多的平台代码以适应它的回调模型。它实际上非常“符合要求”(除了它自己的amqp实现),但它太令人沮丧了,我经历了太多的代码迭代(每个“扭曲的ahah时刻”一次),所以它是100%成功的

谁能帮我趟过泥潭吗?龙卷风?塔架?休息?金字塔瓶子瓶子樱桃味?Web2py?粘贴器/网络广播?还有别的吗?

编辑:


明确地说,与RabbitMQ(或另一个amqp提供商)的集成是最重要的,也是问题的症结所在。

有几点建议

是一个很好的底层框架。它没有提供很多功能,但它提供了一个非常简单的系统,用于将http请求映射到函数调用

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


如果你的需求非常简单,那么简单的选择也不错。做简单的事情比CherryPy或Web.py要复杂一些。WSGI是最低的公分母,现在大多数web框架都是在它之上构建的。

我对python web框架没有全面的了解,但我只想分享我对其中两个框架的观点:

  • 瓶子很轻,很好用。如果你想要一些易学易用的东西,那可能是正确的选择。我将它用于本地运行的非常简单的前端应用程序,我非常喜欢它

  • Tornado在我看来是一个非常好的实时web应用程序非阻塞服务器。再加上它,ajax长轮询变得非常简单。然而,它可能比瓶子更难学。我建议您看看tornadio示例文件夹中的聊天应用程序


我希望它能帮助你

如果你打算长期使用AMQP,那么我会避开芹菜,因为他们使用AMQP的方式非常古怪,这表明开发人员不了解AMQP模型

瓶子是一个很好的框架,可以组合RESTful应用程序(我用它来创建模拟服务器进行测试),如果你已经有了真正工作的代码,你可能会惊讶于瓶子应用程序有多短

我目前正在使用RabbitMQ构建Python应用程序,并通过kombu使用amqplib。我最初选择kombu是为了防止我想交换库和使用pika或其他东西,但现在我希望我刚刚使用了amqplib,并在此基础上构建了一个合适的Pythonic AMQP模型

在深入编码之前,一定要花一些时间在RabbitMQ站点上阅读一些关于AMQP的博客和幻灯片演示,否则你将无法真正理解AMQP模型,并会让事情变得更加困难


请不要使用xmlrpc,除非您必须与其他应用程序对话。瓶子使简单的RESTful应用程序变得如此简单,以至于XMLRPC是不必要的复杂性。

Twisted是您提到的所有选项中最合适的。这种并发管理正是它的目的。奇怪的是,你因为学会了如何使用它而取消了它的资格。我希望你会错过这个问题,JP;)你们的教程对我学习twisted很有帮助,大大提高了我的python排版。我只是感到非常沮丧,当我发现@inlineCallbacks/yield时,我已经写了好几个星期的代码,这些代码不得不扔掉。我刚关上Eclipse去喝酒了。而且,就twisted的寿命而言,整个divmod问题让我感到害怕;我不需要使用最新和最好的[g]事件[let]异步库,但我需要确保我的大量时间投资不会被浪费。你怎么认为?