【发布时间】:2011-04-07 10:39:17
【问题描述】:
我需要从数百个 pop3 电子邮件帐户中提取信息,并且我想构建一个强大的服务器来执行此操作。
twisted 会是这类项目的好选择吗?
现在一个简单的原型是从单个 pop3 帐户中提取,然后它会从多个帐户中提取,但这将是一个序列化的过程。
我想创建一个有多个线程的服务器,以便它可以同时做事。
【问题讨论】:
标签: python multithreading twisted
我需要从数百个 pop3 电子邮件帐户中提取信息,并且我想构建一个强大的服务器来执行此操作。
twisted 会是这类项目的好选择吗?
现在一个简单的原型是从单个 pop3 帐户中提取,然后它会从多个帐户中提取,但这将是一个序列化的过程。
我想创建一个有多个线程的服务器,以便它可以同时做事。
【问题讨论】:
标签: python multithreading twisted
Twisted 是一个用 Python 编写的事件驱动的网络框架。它大量建立在异步和非阻塞特性之上,最适合开发利用这些特性的网络应用程序。它为无法提供异步非阻塞 I/O 的用例提供线程支持。这是基于这样一个事实,即大部分时间都花在等待网络 I/O 操作上。
利用这一点的两个模型是线程模型,您可以创建多个线程,每个线程完成单个任务或使用非阻塞 I/O 通过交错多个任务在单个进程中完成多个任务的单个进程。 Twisted 非常适合第二种模式。
非阻塞模型
+--------------------------+
|task1 | wait period | comp|
+--------------------------+
+--------------------------+
|task2 | wait period | comp|
+--------------------------+
您可以使用 Twisted 开发一个非常强大的服务器,它支持 POP3 / IMAP。
有一个如何构建pop3 client with twisted的例子。
【讨论】:
考虑到您的大部分 POP3 活动将是网络 I/O,这就是 Twisted 擅长的地方。执行基于事件的异步套接字操作并不是真正的线程,这是 Twisted 的至高无上的荣耀。
所以,是的,Twisted 将是此类项目的不错选择。它可以很好地执行客户端和服务器操作,并且启动一个新的异步 TCP 客户端几乎是微不足道的,并且它已经有一个默认可用的 POP3 TCP Client。
【讨论】:
对于服务器来说这是一个不错的选择,但根据您的描述,您实际上是在寻找多线程 POP 客户端。
Twisted 用于对传入请求等事件做出反应,您需要发送请求,所以在这种情况下,我担心扭曲的价值有限。
【讨论】:
谨慎使用twisted,虽然twisted 非常健壮,但我发现使用文档中提供的代码示例启动100 个线程会导致竞争条件和死锁。我的建议是尝试扭曲,但如果扭曲变得无法管理,则让 stdlib 多线程模块等待。我在使用上述库的生产者消费者模型方面取得了很好的成功。
【讨论】: