扭曲是构建多线程服务器的好选择吗?

时间:2010-09-02 16:22:35

标签: python multithreading twisted

我需要从数百个pop3电子邮件帐户中提取,我想构建一个强大的服务器来执行此操作。

对于这类项目,扭曲是不是一个好的选择?

现在一个简单的原型将是从一个pop3帐户中提取,然后它会从许多人那里获取,但这将是一个序列化的过程。

我想创建一个具有多个线程的服务器,以便它可以同时执行任务。

4 个答案:

答案 0 :(得分:7)

Twisted是一个用Python编写的事件驱动的网络框架。它在很大程度上建立在异步和非阻塞功能的基础之上,最好用于开发利用这些功能的网络应用程序。它具有线程支持,用于无法提供异步非阻塞I / O的用例。这是基于以下事实:大部分时间都花在网络I / O操作中。

利用此功能的两个模型是线程模型,您可以在其中创建多个线程,每个线程完成一个任务或使用非阻塞I / O通过交错多个任务在单个进程中完成多个任务的单个进程。 Twisted非常适合第二个模型。

非阻挡模型

+--------------------------+
|task1 | wait period | comp|
+--------------------------+
       +--------------------------+
       |task2 | wait period | comp|
       +--------------------------+

您可以使用Twisted开发一个非常强大的服务器,它具有POP3 / IMAP支持。

有一个如何构建pop3 client with twisted的示例。

答案 1 :(得分:2)

考虑到您的大多数POP3活动将是网络I / O,这就是Twisted擅长的地方。你并没有像执行基于事件的异步套接字操作那样进行线程化,这是Twisted的最高荣耀。

所以,是的,Twisted对于这类项目来说是个不错的选择。它可以同样很好地完成客户端和服务器操作,并且启动新的异步TCP客户端几乎是微不足道的,默认情况下它已经有POP3 TCP Client

答案 2 :(得分:0)

对于服务器来说,它是一个不错的选择,但从您的描述中,您正在寻找一个多线程POP客户端。

Twisted用于对传入请求等事件作出反应,你需要发送请求,因此在这种情况下,我担心扭曲的价值有限。

答案 3 :(得分:-1)

扭曲的谨慎提示,虽然扭曲非常强大我发现使用文档中提供的代码示例旋转一百个线程是竞争条件和死锁的一个方法。我的建议是尝试扭曲,但如果扭曲变得无法管理,stdlib多线程模块会等待。使用上述库,我在使用生产者消费者模型方面取得了很大的成功。