2014-06-26 12 views

Trả lời

12

Module imaplib không cung cấp một cách để thiết lập thời gian chờ, nhưng bạn có thể thiết lập một thời gian chờ mặc định cho các kết nối socket mới qua socket.setdefaulttimeout:

import socket 
import imaplib 
socket.setdefaulttimeout(10) 
imap = imaplib.IMAP4('test.com', 666) 

Hoặc bạn cũng có thể đi về trọng lớp imaplib.IMAP4 với một số kiến ​​thức từ imaplib source và tài liệu, cung cấp kiểm soát tốt hơn:

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') 

Lưu ý rằng sau khi tạo kết nối chúng ta nên thiết lập thời gian chờ ổ cắm trở lại None để g et nó sang chế độ chặn cho sau này socket.makefile cuộc gọi, như đã nêu trong các tài liệu phương pháp:

... Các ổ cắm phải ở chế độ chặn (nó không thể có một thời gian chờ). ...

+0

Vui lòng xóa self.sock.settimeout (Không), để thời gian chờ không hoạt động và luôn chặn. – haosdent

Các vấn đề liên quan