2017-08-26 3 views
1

私はプログラムを作成中です。ファイルからURLを読み込み、要求を出します。しかし、ハンドラは呼び出されません。ここでGRequestsを使用して非同期要求が機能しない

は私のコードです:それは動作しない理由を

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() 

は、誰もが見てもらえますか?

答えて

1

ハンドラが異なるシグネチャを持つ必要があり、他のパラメータを渡すことができます。

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

コンプリート例:

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() 

か短い:

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) 
+0

をまだだけで、動作しません。チェック、 – zython

+1

@zython、よくチェックして、それは動作します、私は最小限の例を貼り付けます –

+0

はい、あなたの作品は、私はあなたの提案を使用します – zython

関連する問題