Pyro4.DaemonオブジェクトのrequestLoopメソッドにいくつか問題があります。loopboostがFalseの場合でもrequestloop(loopCondition)は解放されません。
私が望むのは、requestLoop関数をリリースし、私のデーモンをシャットダウンするための "stop()"メソッドを遠隔呼び出しすることです。
この小さなexempleは動作しません
サーバ
#!/usr/bin/python
# -*- coding: utf-8 -*-
from daemon import Pyro4
class Audit(object):
def start_audit(self):
with Pyro4.Daemon() as daemon:
self_uri = daemon.register(self)
ns = Pyro4.locateNS()
ns.register("Audit", self_uri)
self.running = True
print("starting")
daemon.requestLoop(loopCondition=self.still_running)
print("stopped")
self.running = None
def hi(self, string):
print string
def stop(self):
self.running = False
def still_running(self):
return self.running
def main():
# lancement de l'auditor
auditor = Audit()
auditor.start_audit()
if __name__ == "__main__" :
main()
CLIENT
私は何を期待することは、サーバ印刷 "こんにちは" とし、 "別のHI" とを見ることですimport Pyro4
def main():
with Pyro4.Proxy("PYRONAME:Audit") as au:
au.hi("hello")
au.hi("another hi")
au.stop()
シャットダウン。
しかし、シャットダウンが発生しない場合でも、サーバーは依然としてrequestloopメソッドでブロックされています。 私が望む限り私のプロキシを使うことができます。
しかし、私は他のクライアントを作成した場合、最初のリモート呼び出しで、サーバーがシャットダウンし、クライアントがエラーをスローします:
Pyro4.errors.ConnectionClosedError: receiving: not enough data
すべての私のテストは、私は2番目のプロキシを作成する必要があると言っています私のサーバーにrequestloopを渡すための例外をスローします。
この問題を解決する方法はありますか?
うまく動作します。あなたに感謝します。 私は、リクエストループに対して3秒のタイムアウトがあったと言うTIMEOUTに関するいくつかの文書を読んでいます。多分古いバージョンですか? – ornoone
タイムアウトの0.5秒は非常に短いことに注意してください。 ilはこの値でいくつかのタイムアウト例外を試しました:) 3.5秒はいいです – ornoone