通过grequests调用函数

时间:2016-08-01 19:51:12

标签: python asynchronous request grequests

我发现有很多关于问候的帖子,例如Asynchronous Requests with Python requests 其中描述了grequest的基本用法以及如何通过grequests.get()发送挂钩。我从该链接中提取了这段代码。

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 个答案:

答案 0 :(得分:1)

我还需要查看来源,但是如果你将钩子函数重写为

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

它输出。所以它可能没有调用你原来的钩子(因为它传递的参数比你接受的多)并且捕获异常,所以你没有输出