2017-02-28 15 views
1

私はpythonのgrequestsライブラリを使っていくつかのURLを同時に呼び出しようとしています。問題はgrequestsのロジックをあまり理解していないことです。以下は、私のコードのサンプル(編集されたバージョン)である: -Python grequests issue

respArray = [] 
response = [] 
sessionvar = requests.Session() 
sessionvar.trust_env = False 
for each in range(0,len(urls)): 
     response.append(grequests.get(urls[each],session=sessionvar,cookies=cookiesArray[each])) 
     eachresp = grequests.map(response) 
for r in eachresp: 
    respArray.append(r.json()) 

return respArray 

私respArrayは、URLから返された個々の配列を返します。 私はその配列を実行すると、それぞれが独自のループで実行されているように、同時にではありません。私はどのように私はそれが私は速い結果を得るために同時に実行することができます取得していません..どんな助けも大いに感謝されるでしょう。

答えて

0

このコード:

for each in range(0,len(urls)): 
     response.append(grequests.get(urls[each],session=sessionvar,cookies=cookiesArray[each])) 
     eachresp = grequests.map(response) 
for r in eachresp: 
    respArray.append(r.json()) 

は効果的に各要求を順番に送信しています。あなたはURLを送り、grequestsがそれをにそれぞれループ反復でそれを送るのを待つ。

基本的には次のようになります。あなたはどのようにtheir documentation suggestsに従う必要があるなどの要求

ため

を待って、ループの繰り返し要求

  • を待ち、

    • ループ反復:

      # Build a list of unsent requests 
      requests = (grequests.get(url) for url in urls) 
      # Send them all at once 
      results = grequests.map(requests) 
      return [r.json() for r in results] 
      

      これにより、未送信リクエストのリストが作成され、、次にがすべて送信されます。言い換えれば:

      • ループ繰り返し、
      • が同時にすべての要求私は実際に渡す必要が
  • +0

    を送信...未送信の要求

  • を作成し、未送信の要求
  • ループ反復を作成しますデータを取得するためのトークンとして動作するCookie ..私が探しているのは、r.json()を順番に使用して、各URLのxml構造を深く呼び出すことです。 – sindhujit

  • +0

    r.json()私はすべての回答をまとめてくれます。どのようにしてそれぞれを使って、それぞれのURLのより深いところに電話をかけることができますか?そうすれば、私の検索基準をより速くすることができます。 – sindhujit