无限循环的 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)
才能使其生效。
Only one greenlet is ever running at any given time.
基本上我认为您正在寻找的是并行性而不是异步操作。也许更合适的方法是使用 multiprocessing 模块。
我是 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)
才能使其生效。
Only one greenlet is ever running at any given time.
基本上我认为您正在寻找的是并行性而不是异步操作。也许更合适的方法是使用 multiprocessing 模块。