1
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))
しかし、無限ループを使用するとすぐに、1つのボットIDが表示されます。あたかも他の仕事が終わるのを待っているかのように思えますが、これは意味がありません。私はgevent.joinall
が両方とも並行して動くと思った。
お願いします。レコードの
UPDATE
、私はこの仕事をするためにwhileループの最後の行にgevent.sleep(0.1)
を追加する必要がありました。 Gevent introductionから
ありがとう、実際に私は、 'joinall()'が並行処理が同時に実行されていることを発見しました。これは並列性ではない。したがって、ループの最後に 'gevent..sleep(0.1)'を追加しました。今はうまく動いています。あなたの意見は何ですか、この目的のためにその規模ですか?なぜなら、その入力関数が十分単純であれば、マルチプロセッシングはたくさんのリソースを必要とするからです(メモリ単位)。 – Houman
@Houmanです。しかし、マシンごとのボット数の上限をテストする必要があります。 – lesingerouge