2010-09-02 84 views
6

我需要从数百个pop3电子邮件帐户中提取,并且我想构建一个强大的服务器来执行此操作。扭曲是构建多线程服务器的好选择吗?

这种类型的项目会扭曲吗?

现在一个简单的原型就是从一个单一的pop3账户中提取,然后它会从多个账户中提取,但这将是一个序列化的过程。

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

回答

7

Twisted是一个用Python编写的事件驱动的网络框架。它在很大程度上构建了异步和非阻塞功能,并且最好构想开发利用这些功能的网络应用程序。它支持用于不能提供异步非阻塞I/O的用例。这是基于这样一个事实,即大部分时间都花在等待网络I/O操作。

利用这个模型的两个模型是线程模型,您创建多个线程,每个线程完成单个任务或使用非阻塞I/O通过交错多个任务完成多个任务的单个进程。 Twisted非常适合第二款机型。

非阻塞模式

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

可以开发出扭曲的一个非常强大的服务器,它具有POP3/IMAP支持。有一个如何构建pop3 client with twisted的例子。

0

这是一个很好的服务器的选择,但从描述你正在寻找一个多线程的POP客户端。

Twisted是为响应传入请求等事件而做出的,您需要发送请求,所以在这种情况下,我担心会扭曲为有限的价值。

+2

根本不是。当涉及到网络层时,客户端和服务器并不是完全不同。 – 2010-09-02 19:31:59

2

考虑到大部分POP3活动将成为网络I/O,这就是Twisted擅长的地方。你并不像真正的线程那样执行基于事件的异步套接字操作,这是Twisted的最大荣耀。

所以,是的,扭曲将是这种类型的项目的不错的选择。它可以很好地完成客户端和服务器操作,并且启动一个新的异步TCP客户端几乎是微不足道的,并且它已经有一个默认可用的POP3 TCP Client

-1

扭曲的谨慎之词,而扭曲非常强大我发现使用文档中提供的代码示例旋转上百个线程是竞争条件和死锁的秘诀。我的建议是尝试扭曲,但如果扭曲变得难以管理,stdlib多线程模块会在机翼中等待。我使用上述图书馆的生产者消费者模式获得了很好的成功。

+4

涉及到线程时,扭曲既不多也不少于竞争条件。 Twisted最棒的是能够做很多事情*没有*线程。实际上,像twisted.internet.threads.deferToThread这样的帮助者实际上确实会把线程的一小部分痛苦带走。 ;) – 2010-09-02 19:33:13

+0

这是我指出的模型,我认为它更容易理解,更易于调试,并且通常比扭曲的问题更少。我并不是想说一个图书馆比另一个图书馆更好。我同意扭曲的技术优点是优越的,但这不是使用框架的唯一原因。 – ebt 2010-09-02 20:19:35