nep*_*une 9 python asynchronous gevent
我想发出一个异步HTTP POST请求gevent
- 我不关心响应,我只是想尽快执行请求.但是,每当我尝试使用时gevent.spawn
,请求都不会执行.我知道这一点,因为调用返回的那个.ready()
或.successful()
方法总是返回.Greenlet
gevent.spawn
False
然而,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.
归档时间: |
|
查看次数: |
3793 次 |
最近记录: |