我正在尝试使用来自多处理库的池中的 grequests 进行异步 http 调用。我遇到的问题表明 Grequests 和 multiprocessing 可能彼此不兼容;具体来说,调用monkey.patch_all()
池创建混乱。
最初,没有调用monkey.patch_all()
我的代码:
from gevent import monkey
monkey.patch_all()
我得到这两个错误:
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)
也会导致我的 Pool 创建成功,但不能解决最初的两个错误。