2017-01-31 15 views
5

map ve imap arasındaki farkı bildiğim kadarıyla, tüm isteklerin bitmesini bekledikten sonra sipariş verisini döndürmesi beklenir. Oysa imap, verileri hemen döndürür ve daha az sipariş verir.imap vs grequests kütüphanesinde harita

Ben kullandığınızda:

urls = [...some_data...] 
rs = (grequests.get(u,, hooks=dict(response=callback_f)) for u in urls) 
r = grequests.map(rs) 

kanca kısa sürede tüm istekleri bitirmek olarak kullanılır ve geri çağırma işlevi çağrılır.

Ben kullandığınızda:

urls = [...some_data...] 
rs = (grequests.get(u,, hooks=dict(response=callback_f)) for u in urls) 
r = grequests.imap(rs) 

sonra tek isteği gönderilir değil. dokümantasyon harita ve imap göre

excatly aynı API vardır.

bu beklenen davranış mı? İğneli kanca kullanmamalı mıyım? Python 3.5 kullanıyorum.

cevap

3

olarak bildiğim kadarıyla map ve imap arasındaki fark tüm istekler için map bekler bitirmek olduğunu ve daha sonra sipariş verileri döndürür. Oysa imap, verileri hemen döndürür ve daha az sipariş verir. Gerçekten Doğru değil

. map anında tüm istekleri yapar ve sonucu (muhtemelen "Tüm istekleri için bekler bitirmek için" dedi yüzden bu yüzden bu biraz zaman alabilir) döndürür.

Ancak, isteklerini yalnızca talepleri doğrultusunda yapar. Böylece onları almak için sonuçları üzerinde döngü vardır (ama sadece bir istek yapıldığında her yineleme):

for single_request in r: 
    # so something with "single_request" 
+0

Yani temelde aynı anda 'imap' konu tüm isteklerini yapmak için hiçbir yolu yoktur? – maax

+1

Bu eş zamanlı yapılmalıdır kaç istekleri belirtmek için bir parametre 'size' sahiptir. En azından [ "Nullege Python Örnekler" ile 'grequests.imap'] 'e göre (http://nullege.com/codes/search/grequests.imap) – MSeifert

+0

@MSeifert da I (' .imap kullanım ..., boyut = 1) 'büyük istekleri ile arka planda birbiri ardına gönderilir. – Winand