zython
zython

Reputation: 1288

Asynchronous requests don't work using GRequests

I'm working on a program. It reads urls from a file and then makes requests. But handlers don't get called.

Here is my code:

import grequests


def main():
    async_list =[]

    for site in extractsites():
        action_item = grequests.get('http://' + site, hooks={'response': handleresponse})
        async_list.append(action_item)

    grequests.map(async_list)


def extractsites():
    return ['google.com']


def handleresponse(response):
    print(response)


if __name__ == '__main__':
    main()

Could anyone see why it does not work?

Upvotes: 2

Views: 1988

Answers (1)

Danil Speransky
Danil Speransky

Reputation: 30453

The handler has to have different signature, other parameters could be passed:

def handler(response, **kwargs):
    print(response, kwargs)

Complete example:

import grequests

def main():
    async_list =[]

    for site in extractsites():
        action_item = grequests.get('http://' + site, hooks={'response': handleresponse})
        async_list.append(action_item)

    grequests.map(async_list)

def extractsites():
    return ['google.com']

def handleresponse(response, **kwargs):
    print(response, kwargs)

if __name__ == '__main__':
    main()

Or shorter:

import grequests
urls = ['http://google.com']
handler = lambda response, **kwargs: print(response, kwargs)
grequests.map(grequests.get(url, hooks={'response': handler}) for url in urls)

Upvotes: 2

Related Questions