nep*_*une 9 python asynchronous gevent
我想发出一个异步HTTP POST请求gevent- 我不关心响应,我只是想尽快执行请求.但是,每当我尝试使用时gevent.spawn,请求都不会执行.我知道这一点,因为调用返回的那个.ready()或.successful()方法总是返回.Greenletgevent.spawnFalse
然而,Greenlet 已经开始,因为如果我打电话glet = gevent.spawn(...),那么glet.start(),我得到一个错误说AssertionError: Greenlet already started.
我得到的唯一一次glet.ready() == True是我打电话glet.join(),但这是一个阻止操作.如何在不等待Greenlet完成的情况下执行Greenlet?
由于greenlets是合作的,你的新greenlet将不会运行,直到你屈服于它.在调用spawn之后,调用gevent.sleep(0)yield并运行greenlet.
它将继续运行,直到它执行导致它产生的东西(比如启动http req).然后你的其他代码可以重新恢复.
编辑:
为了解决您的问题grequests,该grequests.send()文档说:
send(r, pool=None, stream=False)
Sends the request object using the specified pool. If a pool isn't
specified this method blocks. Pools are useful because you can specify size
and can hence limit concurrency
Run Code Online (Sandbox Code Playgroud)
由于您尚未指定池,因此请求阻止您的greenlet完成.换句话说,一旦它返回greenlet已经完成.要获得响应,请参阅glt.get()返回的greenlet.