无休止循环的Gevent任务似乎也会阻塞其他所有任务



我是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简介:

在任何特定时间,只有一个绿绿灯在运行。

基本上,我认为您正在寻找的是并行性,而不是异步操作。也许更适合使用多处理模块。

相关内容

  • 没有找到相关文章

最新更新