我想使用gevent
发出异步httppost请求——我不关心响应,只想尽快执行请求。但是,每当我尝试使用gevent.spawn
来执行此操作时,请求就永远不会执行。我知道这一点,因为对从gevent.spawn
返回的.ready()
或.successful()
方法总是返回False
。在
但是,Greenlet已经启动了,因为如果我调用glet = gevent.spawn(...)
,那么glet.start()
,我会得到一个错误,说AssertionError: Greenlet already started
。在
我唯一一次得到glet.ready() == True
是在我调用glet.join()
时,但这是一个阻塞操作。如何让Greenlet在不等待完成的情况下执行?在
因为小菜是合作的,你的新菜鸟在你屈服之前不会运行。在调用spawn之后,调用
gevent.sleep(0)
以产生结果,您的greenlet应该运行。在它将继续运行,直到它做了一些导致它屈服的事情(比如启动httpreq)。然后你的其他代码可以再次恢复。在
编辑:
为了回答您关于
grequests
的问题,grequests.send()
医生说:由于您没有指定池,请求阻止greenlet完成。换句话说,一旦它返回,greenlet就已经完成了。要获得响应,请参见返回的greenlet的
glt.get()
。在相关问题 更多 >
编程相关推荐