Twisted还是Celery?哪个更适合我有大量SOAP调用的应用?
我正在写一个Python应用程序,需要同时处理多个任务和异步操作。我听说过Twisted和Celery这两个工具,但我不太确定哪个更适合我的应用(我对这两个都没有经验)。
这个应用程序(不是一个网页应用)主要是用来向各种第三方API发送SOAP请求。处理一条数据时,我需要按顺序调用几个API。而且我希望能有一组“工作者”来处理这些API,这样我就可以同时向每个API发出多个请求。这个过程应该不会占用太多CPU资源。
具体来说,会有一个外部程序向这个应用的数据库添加一条新的“消息”。我需要一个任务来监视新消息,然后将它们推送到处理流程中。这个处理流程会有4到5个步骤,需要按顺序进行,但可以完全异步执行。每个步骤都会对消息进行某种操作,通常是添加一些细节。每个后续步骤都需要前一个步骤的输出。大部分步骤的工作主要是调用第三方API,通常使用SOAP客户端,解析响应,并更新消息。有些情况下还会涉及创建一个二进制文件(如果这影响到序列化的话)。最后,当最后一步完成后,我需要在数据库中更新一个标志,表示这条消息的整个处理过程已经完成。
另外,由于每个步骤都需要等待网络响应,我希望通过同时发出多个请求来提高整体处理速度。
在这种情况下,Celery和Twisted哪个框架更合适呢?如果它们都能解决问题,使用其中一个有什么优缺点?还有没有其他我应该考虑的选择?
2 个回答
Celery 让你可以使用一些异步库,比如 gevent 和 eventlet,这样你就可以同时享受到两者的好处。
使用 eventlet 的例子可以在这里找到: https://github.com/celery/celery/tree/master/examples/eventlet
使用 gevent 的例子可以在这里找到: https://github.com/celery/celery/tree/master/examples/gevent
在这种情况下,Celery和Twisted哪个框架更合适呢?
这要看你说的“更合适”是什么意思。
如果这两个都能解决问题,那使用其中一个和另一个有什么优缺点呢?
以下是一些简单的优缺点。
Celery的优点:
- 现成的分布式任务队列,支持速率限制、重试和远程工作者
- 开发速度快
- 学习起来相对简单
Celery的缺点:
- 比较重:需要多个进程和外部依赖
- 必须运行一个消息传递服务
- 应用程序的“进程”需要符合Celery的设计
Twisted的优点:
- 轻量级:只需要一个进程,不依赖消息传递服务
- 开发速度快(对于熟悉它的人来说)
- 灵活性高
- 可能更快,因为不需要“内部”消息传递。
Twisted的缺点:
- 学习曲线陡峭
- 后期增加处理能力可能不太容易。
我对这两者都比较熟悉,根据你说的,如果是我,我会选择Twisted。
我觉得用Celery可以更快完成任务,但用Twisted你会学到更多。如果你有时间和兴趣去克服陡峭的学习曲线,我建议你用Twisted来做这个。