我有以下代码段,试图同时从邮箱的不同目录中提取邮件。但是,它显示出以下问题。附加了缩短的堆栈跟踪。
import multiprocessing as mlp
import imaplib as impl
def somefunc(dirc):
mail.select(dirc)
result, data = mail.uid("search", None, "All")
uids = data[0].split()
print dirc
for mail_id in uids:
result, data = mail.uid("fetch", mail_id, "(RFC822)")
if __name__ == '__main__':
mail = impl.IMAP4_SSL("somedomain")
mail.login("username","password")
jobs = []
p1 = mlp.Process(target = somefunc, args = ("INBOX",))
jobs.append(p1)
p1.start()
p2 = mlp.Process(target = somefunc, args = ("Sent",))
jobs.append(p2)
p2.start()
for i in jobs:
i.join()
它引发错误:
Process Process-2:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Process Process-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
........
File "/usr/lib/python2.7/imaplib.py", line 859, in _command
raise self.abort('socket error: %s' % val)
abort: socket error: [Errno 32] Broken pipe
typ, dat = self._simple_command(name, mailbox)
........
error: [Errno 104] Connection reset by peer
不能同时进行imap连接吗???
谢谢... :)
最佳答案
我的猜测是您有问题,因为您试图跨进程共享邮件套接字连接对象。而是尝试让每个进程创建其连接:
import multiprocessing as mlp
import imaplib as impl
def somefunc(domain, name, password, dirc):
mail = impl.IMAP4_SSL(domain)
mail.login(name, password)
mail.select(dirc)
result, data = mail.uid("search", None, "All")
uids = data[0].split()
print dirc
for mail_id in uids:
result, data = mail.uid("fetch", mail_id, "(RFC822)")
if __name__ == '__main__':
jobs = []
for box in ("INBOX", "Sent"):
p = mlp.Process(
target = somefunc,
args = ("somedomain", "username", "password", box)
)
jobs.append(p)
p.start()
for i in jobs:
i.join()
关于python - Python多处理imaplib引发错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14033929/