Python3.6.0 版 Gevent 报错。。。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zeke
V2EX    Python

Python3.6.0 版 Gevent 报错。。。

  •  
  •   zeke 2017-01-18 16:33:22 +08:00 4233 次点击
    这是一个创建于 3243 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/gevent/gevent/issues/903 有遇到过的吗

    这是python代码

    import requests from gevent import monkey monkey.patch_all()#加上这行就报错 respOnse= requests.get('https://www.baidu.com', timeout = 3600) print(response) 

    报错信息如下

    Traceback (most recent call last): File "Desktop/ttt.py", line 5, in <module> respOnse= requests.get('https://www.baidu.com', timeout = 3600) File "/usr/local/lib/python3.6/site-packages/requests/api.py", line 70, in get return request('get', url, params=params, **kwargs) File "/usr/local/lib/python3.6/site-packages/requests/api.py", line 56, in request return session.request(method=method, url=url, **kwargs) File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 488, in request resp = self.send(prep, **send_kwargs) File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 609, in send r = adapter.send(request, **kwargs) File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 423, in send timeout=timeout File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen chunked=chunked) File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request self._validate_conn(conn) File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn conn.connect() File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/connection.py", line 311, in connect cert_reqs=resolve_cert_reqs(self.cert_reqs), File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/util/ssl_.py", line 264, in create_urllib3_context context.options |= options File "/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 459, in options super(SSLContext, SSLContext).options.__set__(self, value) File "/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 459, in options super(SSLContext, SSLContext).options.__set__(self, value) File "/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 459, in options super(SSLContext, SSLContext).options.__set__(self, value) [Previous line repeated 323 more times] RecursionError: maximum recursion depth exceeded 
    第 1 条附言    2017-01-19 09:38:50 +08:00
    感谢回复, python 个人也只是业余爱好,没事写点简单的爬虫,因为不了解 patch 的原理,所以以为只要放在代码执行前 patch 好就可以,这几天再看下 async 吧
    17 条回复    2017-01-19 09:36:54 +08:00
    Reset
        1
    Reset  
       2017-01-18 16:48:59 +08:00
    某处的递归调用死循环了
    table cellpadding="0" cellspacing="0" border="0" width="100%"> zeke
        2
    zeke  
    OP
       2017-01-18 16:59:18 +08:00
    @Reset 关键这可能是框架的问题,不好解决
    kkk330
        3
    kkk330  
       2017-01-18 17:19:38 +08:00
    先 patch...
    hwwangwang
        4
    hwwangwang  
       2017-01-18 17:29:57 +08:00
    gevent 升级到 1.2a2 可以解决
    zeke
        5
    zeke  
    OP
       2017-01-18 17:34:38 +08:00
    @hwwangwang 我的 gevent 版本是 Version: 1.2.1 应该比 1.2a2 还新吧
    mengzhuo
        6
    mengzhuo  
       2017-01-18 17:35:25 +08:00
    先 patch 再搞代码

    ```
    #!/bin/env python
    from gevent import monkey
    monkey.patch_all()
    import requests
    r = requests.get("https://www.baidu.com")
    print(r.status_code)
    ```
    hwwangwang
        7
    hwwangwang  
       2017-01-18 17:39:52 +08:00
    1.2.1 没有问题的,你肯定是用了 1.1.2 或者更低的版本
    hwwangwang
        8
    hwwangwang  
       2017-01-18 17:42:41 +08:00
    对的,姿势也不对。确实要在 `import requests` 之前 patch
    zeke
        9
    zeke  
    OP
       2017-01-18 17:48:30 +08:00
    @hwwangwang
    @mengzhuo
    惭愧啊。。。 (逃。。。
    zeke
        10
    zeke  
    OP
       2017-01-18 17:50:05 +08:00
    我在 python3.5 时运行是没问题的,升级到 3.6 就不行了,没想到是执行顺序问题
    descusr
        11
    descusr  
       2017-01-18 20:08:59 +08:00   1
    真的不想说你了,已经 python 3.6 了,直接用 async / await 不好吗? gevent 是个很危险的方案, python 的作者也很不喜欢 gevent 。我已经不用 gevent 了。
    wwqgtxx
        12
    wwqgtxx  
       2017-01-18 20:19:04 +08:00
    @descusr 我就想问问“ gevent 是个很危险的方案”这句话有依据么?而且不管怎么说 async / await 还是比 gevent 麻烦的多,而且还没办法兼容 python2.7 ,不要跟我说 py27 已经淘汰了,人家项目上就是要用,不是一个人可以左右的
    sleshep
        13
    sleshep  
       2017-01-18 20:24:54 +08:00   1
    我就遇到过一个实习的,听我说 gevent 好用,结果发现用了几个月 patch 放后面,跟 TM 没用有啥区别
    onlyice
        14
    onlyice  
       2017-01-18 23:26:53 +08:00 via Android
    @descusr python 作者很不喜欢 gevent ,这句话的出处可以给下吗?
    beordle
        15
    beordle  
       2017-01-18 23:44:57 +08:00 via Android
    @descusr 话说我们正在开发中的项目在用这个组合。之所以大家不用 async 只是因为大家都不熟悉。个人看法是 gevent 除了性能开销,基本没有什么大问题...只是之前 0.1.2 时遇到过坑而已。个人看法是这俩切换起来并不难,先用 gevent 。反倒是用状态机,异步回调还是 协程, async 这俩 是更需要决策的...差别太大了。关于 gevent 靠不靠谱的问题可以看下 libco 这种类似的东西,不过我个人认为,不用显式状态转移的根本原因是: 人员素质。或者是人类的认知本身就不太适合状态转移。
    neoblackcap
        16
    neoblackcap  
       2017-01-19 01:01:11 +08:00
    gevent 怎么说呢?它帮你做了很多东西,但是这些东西当你真正想动的时候就不好搞,比如若是你一个协程运行了超级久,我自己就对这个协程很无力,我无法在外部有任何方法可以终结*这一个*协程。当然你若是要做到这一步的话,可能 asyncio 可以提供更多的明确的控制精度,而且生态可能更好。
    gevent 的确是一个很不错的库,哪怕现在我司都上 Python3 ,我们还是很多项目在用着它。但是也是这样发现很多坑,比如一个 patch_all 过去,有时候正常运行的程序就变奇怪了。项目中用它, monkeypatch 的边界不好控制。
    还有就是提一个小技巧,若是要用 gevent 的 monkeypatch ,那么 monkeypatch 就要越早打越好。有很多污染是可通过在函数基本 import gevent 来解决的。大家可以多多尝试
    billgreen1
        17
    billgreen1  
       2017-01-19 09:36:54 +08:00   1
    @onlyice google guido gevent
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2615 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 04:10 PVG 12:10 LAX 20:10 JFK 23:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86