2016-08-01 5 views
0

Я понимаю, что было много сообщений о таких встречах, как Asynchronous Requests with Python requests , в котором описывается базовое использование grequests и как отправлять крючки через grequests.get(). Я вытащил этот бит кода прямо из этой ссылки.вызов функций через grequests

import grequests 

urls = [ 
    'http://python-requests.org', 
    'http://httpbin.org', 
    'http://python-guide.org', 
    'http://kennethreitz.com' 
] 

# A simple task to do to each response object 
def do_something(response): 
    print ('print_test') 

# A list to hold our things to do via async 
async_list = [] 

for u in urls: 
    action_item = grequests.get(u, hooks = {'response' : do_something}) 

    async_list.append(action_item) 

# Do our list of things to do via async 
grequests.map(async_list) 

Когда я запускаю это, однако, я не получаю никакого выхода

/$ python test.py 
/$ 

, так как есть 4 ссылки я бы ожидать выход быть

print_test 
print_test 
print_test 
print_test 

Я искал вокруг и гавани» я был в состоянии найти причину отсутствия выхода. Забавно, что есть немного ключевой информации, которую мне не хватает.

ответ

1

мне нужно проверить источники, но если вы переписать функцию крючке

# A simple task to do to each response object 
def do_something(response, *args, **kwargs): 
    print ('print_test') 

он ставит выход. Так что, вероятно, вы не назовете ваш оригинальный крючок (потому что он передает больше аргументов, чем вы согласны), и вы получаете исключение, поэтому вы не получаете выход

+0

Удивительная благодарность за ответ, просто попробовав его, и он отлично работает! Я считаю, что вы правильно разбираетесь в количестве аргументов. – user3267256

+0

печатных kwargs. Вывернутая библиотека пропускает целую кучу аргументов ключевого слова для вашей функции hook. '{'proxies': OrderedDict(), 'timeout': None, 'stream': False, 'cert': None, 'verify': True}' –

Смежные вопросы