我是Gevent/Greenlet的新手,并且已经完成了教程。我想为每个注册团队运行一个机器人。
for bot in self.bots:
events.append(gevent.spawn(bot.start))
gevent.joinall(events)
有趣的是,如果我不使用while true
循环,我会得到控制台中显示的两个机器人的bot_id
。
def start(self):
while True:
for reply in self.slack_client.rtm_read():
self.input(reply)
time.sleep(0.1)
logger.info("Log:{0}".format(self.bot_id))
但一旦我使用了一个无休止的循环,我只能看到一个机器人的id被显示。似乎另一项任务正在等待这项任务完成,这毫无意义。我以为gevent.joinall
会并行运行。
有什么建议吗?
更新
为了记录在案,我必须在while循环的最后一行添加gevent.sleep(0.1)
才能使其工作。
来自Gevent简介:
在任何特定时间,只有一个绿绿灯在运行。
基本上,我认为您正在寻找的是并行性,而不是异步操作。也许更适合使用多处理模块。