greqests.map 中的太多 url 导致 gevent.hub.LoopExit 仅在 mac

Posted

技术标签:

【中文标题】greqests.map 中的太多 url 导致 gevent.hub.LoopExit 仅在 mac【英文标题】:Too many urls in greqests.map causes gevent.hub.LoopExit only on mac 【发布时间】:2014-05-31 18:46:45 【问题描述】:

在我的代码中 (https://github.com/chembl/chembl_webresource_client/blob/master/chembl_webresource_client/web_resource.py#L98)

我正在打电话给grequests.map

ret = grequests.map(rs, size=50)

rs 作为 URL 列表。如果该列表的大小大于某个值(我的情况是 300),我会得到:

File "/Library/Python/2.7/site-packages/gevent/hub.py", line 331, in switch
      return greenlet.switch(self)
gevent.hub.LoopExit: This operation would block forever

不管size 参数(我尝试了 10 到 50 之间的不同值,并且完全忽略了这个参数)。

这只发生在 macOS 上。在 Ubuntu 中,任何大小的 URL 列表都可以使用。

我将不胜感激,因为这是我的小型图书馆的一大亮点。

【问题讨论】:

您使用哪个 gevent 和 greenlet 版本? python -c "import gevent; print gevent.__version__" , python -c "import greenlet; print greenlet.__version__" @reclosedev 1.0, 0.4.2 但请注意,这是您在输入“pip install grequests”后默认安装的内容。 【参考方案1】:

也许你遇到了这个错误:https://github.com/gevent/gevent/issues/423

将在 1.0.1 中修复。

你可以试试 master 分支吗?

【讨论】:

原来每个请求都是在单独的会话中执行的。这显然不是我想要的,所以在解决这个问题并在所有请求之间共享一个会话之后,代码更快并且不再出现死锁。另一方面,在单独的会话中执行每个请求会导致任何问题(除了效率极低),因此感谢您提供的信息。 @mnowotka 你有代码示例吗,也许可以帮助解决问题

以上是关于greqests.map 中的太多 url 导致 gevent.hub.LoopExit 仅在 mac的主要内容,如果未能解决你的问题,请参考以下文章

此服务的太多实例已在运行

在主 ui 线程上处理来自其他线程的太多动画请求 - android

测试圈竞争激烈,你烦恼的根源在于,想的太多却做的太少...

你迷茫的原因在于读书太少而想的太多!!!

IDEA 插件安装的太多会有啥影响?

问题在于读书不多而想的太多