- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我必须编写一个小型守护程序,它可以检查多个(可能多达数百个)电子邮件帐户是否有新邮件。
到目前为止我的想法:
我可以为每个连接创建一个新线程,使用 imapclient用于每 x 秒检索一次消息,或者尽可能使用 IMAP IDLE。我还可以稍微修改一下 imapclient 和 select()
以仅使用单个线程激活 IMAP IDLE 的所有套接字。
有没有更好的方法来解决这个任务?
最佳答案
要是几个月后你再问就好了,因为 Python 3.3.1 可能会有一个漂亮的新异步 API。参见 http://code.google.com/p/tulip/对于当前的原型(prototype),但您可能还不想使用它。
如果您使用的是 Windows,您可以毫无问题地处理数百个线程。如果是这样,这可能是最简单的解决方案。所以,试试看吧。
如果你在 Unix 上,你可能想使用 poll
而不是 select
,因为当你进入数百个连接。 (Linux 上的 epoll
或 Mac/BSD 上的 kqueue
更具可扩展性,但在您进入数千个连接之前通常并不重要。)
但在您自己执行此操作之前,您可能需要考虑以下几点:
Twisted
绝对是其中最难入门的——但它还附带了一个随时可用的 IMAP 客户端,以及其他数百个东西,所以如果你愿意处理一点学习曲线,您可能会完成得更快。
Tornado
感觉最像写原生的 select
类型的代码。我实际上并不知道它附带的所有功能;它可能有一个 IMAP 客户端,但如果没有,您将以您考虑使用 select
的相同方式破解 imapclient
。
Monocle
位于 Twisted
或 Tornado
之上,让您可以编写类似于 3.3.1 中的代码,在 Twisted 或 Tornado 之上(尽管实际上,您可以使用 inlineCallbacks
在 Twisted 中直接做同样的事情,只是文档不鼓励您在不先学习其他所有内容的情况下学习它)。同样,您会在这里破解 imapclient
。 (或者改用 Twisted
的 IMAP 客户端……但在那个时候,您还不如直接使用 Twisted
。)
gevent
让您可以编写与线程(或同步)代码几乎相同的代码,并且神奇地使其成为异步代码。您可能需要对 imapclient
进行一些修改,但这可能就像运行 magic monkeypatching 实用程序一样简单,仅此而已。除此之外,您编写的代码与使用线程编写的代码相同,只是您创建了一堆 greenlet 而不是一堆线程,并且您获得了一个数量级或两个更好的可扩展性。
如果您正在寻找绝对最大的可扩展性,您可能希望同时进行并行化和多路复用(例如,运行 8 个进程,每个进程使用 gevent
,在 Unix 上,或附加Windows 上 IOCP 的 native 线程池),但对于几百个连接,这不是必需的。
关于python - 在 Python 中一次检查大量 IMAP 帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182560/
我有一堆代码执行 IMAP 命令“search, idle, done, search, idle, done, search, ...”。 是否有可能某些消息在搜索和空闲命令之间到达,因此只能在空闲
(使用IMAP命令,而不借助任何其他邮件程序包) 最佳答案 我不确定您对imap的了解程度如何,但是基本上在登录后,“选择”源邮箱,“复制”邮件,然后“删除”邮件(如果是,则“删除”旧邮箱)现在是空的
我正在编写一个 IMAP 爬虫,它是开源应用程序的一部分,对于增量爬网,我想使用消息 UID 来确定我是否已经看到了特定消息。 现在我找到了 a post从 2007 年开始说 IMAP UID 并不
我注意到 libcurl 支持 IMAP,但在文档和示例中没有找到任何内容 http://curl.haxx.se/libcurl/c/imap.html很穷。有谁知道如何在这个库中使用这个协议(pr
IMAP UID 是否保证为数字?我读过 RFC3501 中的部分,它说: Unique identifiers are assigned in a strictly ascending fashio
IMAP UID 是否保证为数字?我读过 RFC3501 中的部分,它说: Unique identifiers are assigned in a strictly ascending fashio
我正在使用开源 IMAP C# 库 IMapX (http://hellowebapps.com/products/imapx/)。当我试图从收件箱中获取电子邮件时,需要花费很多时间。有没有办法根据接
我正在尝试使用 Limilabs imap 库连接到电子邮件; tcpc = new System.Net.Sockets.TcpClient("imap.gmail.com", 993); 工作
我正在尝试使用 imap 方法通过 php 打开电子邮件,但它给我一个错误无法打开流 {imap.gmail.com:993/imap/ssl}INBOX,这是我的代码 $hostname = '{i
有没有办法确定给定电子邮件地址的 POP 或 IMAP 服务器?我正在为非技术用户构建一个应用程序,我真的不想打扰他们询问他们的 IMAP/POP 服务器。 mail2web.com这样做,但我不确定
如何确定通过 APPEND 添加的消息的 UID到邮箱?通过 STATUS我可以事先得到下一个值的预测,我可以 SEARCH之后,但依赖这些会引入竞争条件,因为可能在这些命令之间添加了其他消息。 最佳
这个搜索查询对我来说似乎有效: UID SEARCH OR ( OR ( OR (FROM "def@gmail.com") (FROM "abc@gmail.com")) (FROM "ghi@gm
我正在使用以下代码以编程方式验证电子邮件。 Properties properties = new Properties(); Session emailSession = Session.getDe
我正在使用 OpenSSL 连接到邮件服务器。 POP3 工作正常,但 IMAP 有问题。基于 CAPABILITY 命令服务器支持 PLAIN、NTLM 和 GSS-API 认证方法。 我想使用 P
我正在使用以下代码建立 IMAP 连接。我想阅读电子邮件。我读了这个文件 link无法从这里继续。 我的代码: #lang racket (define imap-server "*****") (d
在尝试使用 php 的 imap 函数时,我无法连接到 Gmail 的 imap 服务器。我正在使用: $mail = imap_open('{imap.gmail.com:993/imap/ssl/
我试图更好地理解 Gmail API . stated benefits 之一Gmail API 的最大特点是它可以“提供比 IMAP 显着的性能改进”。 Gmail API 和协议(protocol
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在制作一个支持 POP3 和 IMAP 的邮件客户端。我正在使用 vmime api 用 C++ 对客户端进行编程。我的问题是:同步邮件的最佳方式是什么? 我认为标识符是个好方法,但我不知道同步邮
我正在制作一个支持 POP3 和 IMAP 的邮件客户端。我正在使用 vmime api 用 C++ 对客户端进行编程。我的问题是:同步邮件的最佳方式是什么? 我认为标识符是个好方法,但我不知道同步邮
我是一名优秀的程序员,十分优秀!