2

我对 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将同时运行。

请问有什么建议吗?

更新

作为记录,我必须gevent.sleep(0.1)在 while 循环的最后一行添加才能完成这项工作。

4

1 回答 1

3

来自Gevent 的介绍

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

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

于 2016-05-05T09:23:54.373 回答