Я совершенно новичок в Gevent/Greenlet и прошел через учебники. Я хотел бы запустить бота для каждой зарегистрированной команды.Задача Gevent с бесконечным циклом, похоже, блокирует все остальные задачи, а также
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))
Но как только я использую бесконечный цикл, я могу видеть только один отображаемый идентификатор бота. Кажется, что другая задача ждет завершения этого, что не имеет смысла. Я думал, что gevent.joinall
будет работать параллельно.
любые советы по этому просьба?
UPDATE
Для записи, я должен был добавить gevent.sleep(0.1)
на последней строке в то время как петли, чтобы сделать эту работу.
Спасибо, на самом деле я узнал, что 'joinall()' является одновременным запуском одновременно. Что не является параллелизмом. Поэтому я добавил 'gevent..sleep (0.1)' в конце цикла, и теперь он работает отлично. Как вы думаете, будет ли эта шкала для этой цели? Поскольку многопроцессорность требует много ресурсов (по памяти) – Houman
@Houman, он должен работать очень хорошо, если эта входная функция достаточно проста. Но вы должны проверить предел количества ботов на машину. – lesingerouge