1
我對Gevent/Greenlet很新,並且已經通過了教程。 我想爲每個註冊團隊運行一個bot。具有無限循環的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))
但是,只要我使用無限循環,我只能看到一個機器人的ID正在顯示。看起來好像另一個任務正在等待這個完成,這是沒有意義的。我認爲gevent.joinall
會同時運行。
對此有什麼建議嗎?
UPDATE
爲了記錄在案,我不得不對while循環,使這項工作的最後一行添加gevent.sleep(0.1)
。
謝謝,實際上我發現'joinall()'是併發運行在同一時間。這不是並行性。因此,我在循環結尾添加了'gevent..sleep(0.1)',現在它工作得很好。你的意見是什麼,這是爲了達到這個目的嗎?因爲多處理佔用大量資源(內存) – Houman
@Houman如果輸入函數足夠簡單,它應該工作得很好。但是你應該測試每臺機器的機器人數量的限制。 – lesingerouge