2012-03-19 49 views
6

Mã của tôi đã bị mắc kẹt trên cuộc gọi chức năng này:feedparser với thời gian chờ

feedparser.parse("http://...") 

này đã làm việc trước đó. Url thậm chí không thể mở trong trình duyệt. Bạn sẽ chữa trị trường hợp này như thế nào? Có khả năng hết thời gian chờ không? Tôi muốn tiếp tục như thể không có gì xảy ra (chỉ với việc in một số thông báo hoặc đăng nhập vấn đề này)

Trả lời

11

Bạn có thể chỉ định thời gian chờ trên toàn cầu sử dụng socket.setdefaulttimeout().

Thời gian chờ có thể giới hạn thời gian hoạt động của socket riêng lẻ - feedparser.parse() có thể thực hiện nhiều thao tác ổ cắm và do đó tổng thời gian dành cho dns, thiết lập kết nối tcp, dữ liệu gửi/nhận có thể dài hơn nhiều. Xem Read timeout using either urllib2 or any other http library.

+0

OK, tôi sử dụng nó nhưng không biết nếu nó hoạt động vì URL với tải vô tận là hoạt động trở lại. – xralf

6

Sử dụng Python requests thư viện cho mạng IO, feedparser chỉ phân tích cú pháp:

# Do request using requests library and timeout 
try: 
    resp = requests.get(rss_feed, timeout=20.0) 
except requests.ReadTimeout: 
    logger.warn("Timeout when reading RSS %s", rss_feed) 
    return 

# Put it to memory stream object universal feedparser 
content = BytesIO(resp.content) 

# Parse content 
feed = feedparser.parse(content) 
Các vấn đề liên quan