Twisted还是Celery?哪个更适合我有大量SOAP调用的应用?

29 投票
2 回答
5821 浏览
提问于 2025-04-16 19:36

我正在写一个Python应用程序,需要同时处理多个任务和异步操作。我听说过Twisted和Celery这两个工具,但我不太确定哪个更适合我的应用(我对这两个都没有经验)。

这个应用程序(不是一个网页应用)主要是用来向各种第三方API发送SOAP请求。处理一条数据时,我需要按顺序调用几个API。而且我希望能有一组“工作者”来处理这些API,这样我就可以同时向每个API发出多个请求。这个过程应该不会占用太多CPU资源。

具体来说,会有一个外部程序向这个应用的数据库添加一条新的“消息”。我需要一个任务来监视新消息,然后将它们推送到处理流程中。这个处理流程会有4到5个步骤,需要按顺序进行,但可以完全异步执行。每个步骤都会对消息进行某种操作,通常是添加一些细节。每个后续步骤都需要前一个步骤的输出。大部分步骤的工作主要是调用第三方API,通常使用SOAP客户端,解析响应,并更新消息。有些情况下还会涉及创建一个二进制文件(如果这影响到序列化的话)。最后,当最后一步完成后,我需要在数据库中更新一个标志,表示这条消息的整个处理过程已经完成。

另外,由于每个步骤都需要等待网络响应,我希望通过同时发出多个请求来提高整体处理速度。

在这种情况下,Celery和Twisted哪个框架更合适呢?如果它们都能解决问题,使用其中一个有什么优缺点?还有没有其他我应该考虑的选择?

2 个回答

0

Celery 让你可以使用一些异步库,比如 gevent 和 eventlet,这样你就可以同时享受到两者的好处。

使用 eventlet 的例子可以在这里找到: https://github.com/celery/celery/tree/master/examples/eventlet

使用 gevent 的例子可以在这里找到: https://github.com/celery/celery/tree/master/examples/gevent

17

在这种情况下,Celery和Twisted哪个框架更合适呢?

这要看你说的“更合适”是什么意思。

如果这两个都能解决问题,那使用其中一个和另一个有什么优缺点呢?

以下是一些简单的优缺点。

Celery的优点:

  • 现成的分布式任务队列,支持速率限制、重试和远程工作者
  • 开发速度快
  • 学习起来相对简单

Celery的缺点:

  • 比较重:需要多个进程和外部依赖
  • 必须运行一个消息传递服务
  • 应用程序的“进程”需要符合Celery的设计

Twisted的优点:

  • 轻量级:只需要一个进程,不依赖消息传递服务
  • 开发速度快(对于熟悉它的人来说)
  • 灵活性高
  • 可能更快,因为不需要“内部”消息传递。

Twisted的缺点:

  • 学习曲线陡峭
  • 后期增加处理能力可能不太容易。

我对这两者都比较熟悉,根据你说的,如果是我,我会选择Twisted。

我觉得用Celery可以更快完成任务,但用Twisted你会学到更多。如果你有时间和兴趣去克服陡峭的学习曲线,我建议你用Twisted来做这个。

撰写回答