マルチプロセッシング ライブラリのプール内から grequests を使用して非同期 http 呼び出しを実行しようとしています。Grequest とマルチプロセッシングが相互に互換性がない可能性があることを示唆する問題が発生しています。具体的には、monkey.patch_all()
プールの作成で混乱を引き起こします。
monkey.patch_all()
最初は、私のコードを呼び出さずに:
from gevent import monkey
monkey.patch_all()
次の 2 つのエラーが表示されます。
NotImplementedError: gevent is only usable from a single thread
と
requests.exceptions.ConnectionError: None: Max retries exceeded with url: SOME_URL (Caused by redirect)
を呼び出すmonkey.patch_all()
と上記のエラーは修正されますが、コードが次の場所でハングします。
p = Pool(THREAD_POOL_SIZE)
呼び出さないとmonkey.patch_all()
、プールが正常に作成されます。呼び出すmonkey.patch_all(thread=False, socket=False)
と、プールも正常に作成されますが、最初の 2 つのエラーは解決しません。