6
我正在查看Python的imaplib的API。Python的imaplib是否允許您設置超時?
從我所知道的,沒有辦法像smtplib那樣設置超時。
這是正確的嗎?如果你不希望它阻止,你將如何處理一個無效的主機?
我正在查看Python的imaplib的API。Python的imaplib是否允許您設置超時?
從我所知道的,沒有辦法像smtplib那樣設置超時。
這是正確的嗎?如果你不希望它阻止,你將如何處理一個無效的主機?
的imaplib
模塊不提供一種方法來設置超時時間,但你可以通過socket.setdefaulttimeout
設置新的套接字連接的默認超時:
import socket
import imaplib
socket.setdefaulttimeout(10)
imap = imaplib.IMAP4('test.com', 666)
或者你也可以去與重寫imaplib.IMAP4
類從imaplib
source和文檔的一些知識,它提供了更好的控制:
import imaplib
import socket
class IMAP(imaplib.IMAP4):
def __init__(self, host='', port=imaplib.IMAP4_PORT, timeout=None):
self.timeout = timeout
# no super(), it's an old-style class
imaplib.IMAP4.__init__(self, host, port)
def open(self, host='', port=imaplib.IMAP4_PORT):
self.host = host
self.port = port
self.sock = socket.create_connection((host, port), timeout=self.timeout)
# clear timeout for socket.makefile, needs blocking mode
self.sock.settimeout(None)
self.file = self.sock.makefile('rb')
注意,創建連接後,我們應該設置套接字超時回到None
到g等它用於後續socket.makefile
呼叫阻塞模式中,如在所述方法中的文檔指出:
... 插座必須在阻塞模式(它不能有一個超時)。 ...
請刪除self.sock.settimeout(無),它讓超時不起作用,並始終阻止。 – haosdent