Reputation: 1288
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
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