問題タブ [grequests]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1058 参照

python - HTTPS 経由の gevent/grequests での奇妙なブロック動作

次のコードは、200 ミリ秒ごとに要求を送信し、応答が来るたびに非同期で処理する必要があります。

HTTP 経由では期待どおりに動作します。リクエストは 200 ミリ秒ごとに送信され、レスポンスが到着するたびにレスポンス コールバックが個別に呼び出されます。ただし、HTTPS では、応答が到着するたびに要求が大幅に遅延します (応答ハンドラーが機能しない場合でも)。応答コールバックは、要求ごとに 2 回呼び出され、1 回は長さゼロの応答で呼び出されるようです (編集: これはリダイレクトのためであり、ブロッキングの問題とは無関係のようです、Padraic に感謝します)。

HTTPS を介したこのブロック動作の原因は何ですか? (www.bbc.co.uk地理的に私から離れた例にすぎませんが、テストしたすべてのサーバーで発生します)。

grequests_test.py

$ ipython2 grequests_test.py 'http://www.bbc.co.uk'(期待される結果)

ipython2 grequests_test.py 'https://www.bbc.co.uk'(リクエストは遅れて送信されます)

最初の応答は、次の要求が送信されるはずだったのに送信されてからかなり後に到着したように見えることに注意してください。最初の応答が到着する前に、スリープが返されず、次の要求が送信されなかったのはなぜですか?

0 投票する
2 に答える
1351 参照

python - AWS Lambda の grequests をインポートできません

ランタイムで AWS Lambda スクリプトを実行していPython 2.7ます。ただし、初期化するたびにgrequestsライブラリのインポートが開始されますが、gevent に依存しているため失敗します。

Gevent is required for grequests.

grequests ライブラリの検索に成功しているように見えますが (gevent が必要であることを認識しているため)、失敗しています。

私がこれまでに試したこと:

pip install --ignore-installed grequests -t .

pip install --ignore-installed grequests -t ./lib

pip install --ignore-installed gevent -t .

pip install --ignore-installed gevent -t ./lib

次に、ディレクトリの内容を圧縮し、次の手順に従って AWS にアップロードします: http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package。 html

何を試しても Lambda がgevent見つからないようですが、デフォルト以外の他のライブラリを問題なく見つけることができます。

0 投票する
0 に答える
2113 参照

python - Python: grequests を使用した非同期リクエストは、リクエストよりも大幅に高速ではありません

requestsPython でモジュールを使用して API からデータを取得する方法を学び始めたところです。非常に単純な GET リクエストを使用してこの API を呼び出しますが、リクエストごとに異なる値を渡すだけで、500,000 回以上実行する必要があります。応答は JSON オブジェクトであり、必要なものを簡単に解析できます。

問題は、私がこれを行っている現在の方法であるfor-loopusingrequestsが遅すぎることです。私が理解しているように、このアプローチはリクエストを送信し、レスポンスが完了するのを待ってから、イテラブル内の次のリクエストに移動します。

これを解決するために、grequest非同期リクエストをサポートするモジュールに出会いました。このアプローチでは、おそらく 100 程度のバッチで、多くのクエリをすべて同時に開始できることを望んでいます。理想的には、これにより、大きな iterable をより迅速に移動できるようになります。

ドキュメントといくつかの例を読んで、以下の架空の例を作成しました。明らかに、これははるかに小さいデータセットであるため、すべての URL を小さなチャンクに分割して一度に送信するために使用する部分は含めていません。実際のデータセットに移る前に、このサンプル データセットを使用して自分の方法を証明したいと考えています。

現在、以下のコードで を使用するとtimeit、各メソッドの結果のランタイムは次のようになります。

  • for ループとリクエスト = 16.9 秒
  • マッピングと非同期の grequests = 13.9 秒

私の質問は、 grequests メソッドがすべてのリクエストを同時に開始している場合、なぜそれが大幅に高速にならないのでしょうか? さらに、複数のリクエストを同時に送信する方法について何か提案はありますか?

0 投票する
0 に答える
1221 参照

python - 解析: grequests "None" 応答: ホストによって接続が閉じられましたか?

送信するリクエストが最大 50 個しかない場合にうまく機能するコードを試していますが、現在はさらに多くのリクエスト (約 200 個) を試しています。サーバーが 60 個のリクエストの後に接続を閉じているように感じます。 「なし」の回答。

私が使用しているコードは次のとおりです。

反応:

とトレースバック:

どうすればこれを修正できますか? 50 のリクエストが送信されてから 30 秒ほど待ってから、さらに 50 を送信する必要がありますか? サーバーへのリクエストに関する Google ドキュメントへのリンクを持っている人はいますか?

ありがとう!

0 投票する
1 に答える
260 参照

python - Scrapy スロットリングとリクエスト スケジューリングのみのマイクロサービス

現在、Python リクエストを使用して約 20,000 ページの json をダウンロードしています。スクレイピングしているサーバーによるレート制限と、おそらく非同期呼び出し/スケジューリングの欠如により、ボトルネックが発生しています。スクレイピングに関連するこれらの問題に対処する機能があると聞いたので、スクレイピーは良い解決策になると思いました. 問題は、それらが私が必要とする唯一の部分であり、スパイダリング/解析/orm/などは必要ありません。ドキュメントを見ると、これらのコンポーネントだけをどのように分離するかが明確ではありませんでした。スクレイピーが行うことのこれらの部分だけのためのマイクロサービスが必要です。Flask から Scrapy の Django へ。grequests が非同期に役立つ可能性があることを確認しましたが、そのルートに行く場合でも、レート制限と失敗したリクエストを再試行する方法が必要です。誰かが私を正しい方向に向けることができますか?

0 投票する
0 に答える
138 参照

python - ネストされた Grequest が実行されない

grequest に追加の grequest を生成させようとしていますが、第 2 レベルの grequest コールバックが実行されていないことがわかりました。ユースケースは、API からの結果の最初のページを表示し、それを使用して、アクセスする追加のページがいくつあるかを計算し、それらのページの新しい grequest を作成することです。関連するコード スニペットは次のとおりです。

0 投票する
1 に答える
945 参照

python - grequest による関数の呼び出し

Asynchronous Requests with Python requestsなど、grequest に関する多くの投稿があったことを認識しています。この記事では、grequest の基本的な使用方法やフックを送信する方法について説明していますgrequests.get()。このリンクからこのコードを取り出しました。

ただし、これを実行すると出力が得られません

4 つのリンクがあるため、出力は

私は周りを検索してきましたが、出力が不足している理由を見つけることができませんでした。私が見逃している重要な情報が少しあることを面白がっています。