如何处理imaplib2

2024-06-16 11:33:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它使用imap空闲协议检查gmail帐户。为此,我使用imaplib2,hostedhere。它经常抛出未经处理的异常:

  Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\imaplib2\imaplib2.py", line 1830, in _reader
    raise IOError("Too many read 0")
IOError: Too many read 0

(来自已发布链接的1839行)

以下是违规部分(中途):

^{pr2}$

我无法从我的脚本中捕捉到这个错误,因为imaplib2为它的'u reader'和'u writer函数创建了单独的线程。我真的不理解这个错误,所以我的问题是我应该修改imaplib2源代码来忽略这个错误,还是改变它的条件,或者怎样?在

谢谢


Tags: 脚本协议read错误帐户gmail空闲many
1条回答
网友
1楼 · 发布于 2024-06-16 11:33:24

我从imaplib2得到了各种错误,包括errno 10054连接被强制关闭和read 0太多。这些错误会导致我的程序挂起大约半个小时。为了解决这些问题,我使用多处理在一个单独的进程中进行工作,并实现了一个活动检查。如果在一段时间内没有活动,主进程将终止子进程(我知道,这并不理想),并生成另一个进程。下面是一些相关的代码。在

def MasterRun():
    from multiprocessing import Value

    counter = Value("I", 0)

    last = counter.value
    elapsed = 0
    interval = 1

    TIMEOUT = 90

    proc = _make_process(counter)
    # value < 0 signals process quit naturally
    while counter.value >= 0:
        if counter.value != last:
            elapsed = 0
            last = counter.value
        if elapsed >= TIMEOUT or not proc.is_alive():
            print "terminating process reason: %s\n" % \
                  ("no activity time was exceeded" if proc.is_alive() else "process committed suicide")
            proc.terminate()
            proc.join(25)
            proc = _make_process(counter)
            proc.start()
            elapsed = 0

        sleep(interval)
        elapsed += interval
    proc.join(25)

def _make_process(counter):
    from multiprocessing import Process
    print "spawning child process"
    proc = Process(target=_make_instance, args=(counter, ))
    proc.daemon = True
    proc.start()
    return proc

相关问题 更多 >