无限循环的 Gevent 任务似乎也阻止了所有其他任务

Gevent task with endless loop seems to block every other task aswell

我是 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 introduction

Only one greenlet is ever running at any given time.

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