2010-08-20 36 views
8

thể trùng lặp:
How can I speed up fetching pages with urllib2 in python?Lấy nhiều url cùng một lúc/song song

Tôi có một kịch bản python mà tải trang web, phân tích nó và gửi lại một số giá trị từ trang. Tôi cần phải cạo một số trang như vậy để có được kết quả cuối cùng. Mỗi lần truy xuất trang mất nhiều thời gian (5-10 giây) và tôi muốn thực hiện yêu cầu song song để giảm thời gian chờ.
Câu hỏi đặt ra là - cơ chế nào sẽ thực hiện nhanh chóng, chính xác và với lượng bộ nhớ CPU/Bộ nhớ tối thiểu? Xoắn, asyncore, luồng, cái gì khác? Bạn có thể cung cấp một số liên kết với các ví dụ không?
Cảm ơn

UPD: Có một vài giải pháp cho vấn đề này, tôi đang tìm sự thỏa hiệp giữa tốc độ và tài nguyên. Nếu bạn có thể cho biết một số chi tiết về trải nghiệm - cách tải xuống nhanh chóng từ chế độ xem của bạn, v.v. - nó sẽ rất hữu ích.

+0

Xem câu trả lời của tôi ở đây http://stackoverflow.com/questions/3491455 –

Trả lời

13

đa xử lý.Đồ có thể là một việc tốt, có some useful examples. Ví dụ nếu bạn có một danh sách các url, bạn có thể lập bản đồ thu hồi nội dung một cách đồng thời:

def process_url(url): 
    # Do what you want 
    return what_you_want 

pool = multiprocessing.Pool(processes=4) # how much parallelism? 
pool.map(process_url, list_of_urls) 
+0

Cũng giống như cảnh báo cho bất kỳ ai khác, tôi không chắc tại sao, nhưng trong vòng vài giây sau khi chạy mã, nó mang hệ thống của tôi đến dừng hoàn toàn. – Peter

+0

Vâng, về điều đó. Nói với bất kỳ hệ thống nào để thực hiện 12 điều bazillion cùng một lúc có thể gây ra một chút chậm trễ trong việc xử lý các tác vụ khác. LOL. –

3

multiprocessing

Tạo ra một loạt quy trình, một cho mỗi URL bạn muốn tải xuống. Sử dụng Queue để giữ danh sách các URL và làm cho các quy trình từng đọc một URL khỏi hàng đợi, xử lý và trả về một giá trị.

1

Sử dụng không đồng bộ, nghĩa là hướng sự kiện chứ không phải là ngăn chặn, khuôn khổ cho việc này mạng. Một tùy chọn là use twisted. Một tùy chọn khác gần đây đã có sẵn là sử dụng một mắt. Khung nhỏ này che giấu sự phức tạp của các hoạt động không chặn. Xem this example. Nó có thể sử dụng xoắn hoặc lốc xoáy đằng sau hậu trường, nhưng bạn không thực sự nhận thấy nhiều của nó.

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