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

时间:2016-05-04 17:09:29

标签: python python-3.x gevent slack-api greenlets

我对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)才能使其正常工作。

1 个答案:

答案 0 :(得分:2)

来自Gevent introduction

  

在任何给定时间只运行一个greenlet。

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