import gevent
from gevent.event import AsyncResult
import time
class Job(object):
def __init__(self, name):
self.name = name
def setter(job):
print 'starting'
gevent.sleep(3)
job.result.set('%s done' % job.name)
def waiter(job):
print job.result.get()
# event loop
running = []
for i in range(5):
print 'creating'
j = Job(i)
j.result = AsyncResult()
running.append(gevent.spawn(setter, j))
running.append(gevent.spawn(waiter, j))
print 'started greenlets, event loop go do something else'
time.sleep(5)
gevent.joinall(running) 在调用joinall之前,gevent实际上不会启动。
select/epoll来查看哪一个需要加入而不是joinall()发布于 2016-02-25 18:59:04
不,不是马上就开始的。它将在您的主绿地向集线器生成后立即启动(例如,通过调用睡眠或连接来释放控制)。
显然,您的意图是在调用time时开始。它没有,因为你没有猴子修补它。
将这些行添加到文件的最上面:
from gevent import monkey
monkey.patch_all()然后,这将具有您想要的行为(因为在幕后,time将被修改以屈服于集线器)。
或者,您可以调用gevent.sleep。
发布于 2018-03-07 23:27:16
由于没有猴子补丁,time.sleep()会导致应用程序暂停。使用gevent.sleep(5)代替。
发布于 2021-01-29 06:33:24
第一步应该是猴子的修补。
from gevent import monkey;
monkey.patch_all()这将异步地生成绿色产品。
https://stackoverflow.com/questions/32936584
复制相似问题