我對Pyro4.Daemon對象的requestLoop方法有一些問題。即使在loopCondition爲False之後,requestloop(loopCondition)也不會釋放
我想要的是遠程調用「stop()」方法來釋放requestLoop函數並關閉守護進程。
這個小爲例不起作用
服務器
#!/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
import Pyro4
def main():
with Pyro4.Proxy("PYRONAME:Audit") as au:
au.hi("hello")
au.hi("another hi")
au.stop()
我想到的是要看到服務器打印 「你好」 和 「另一個喜」,然後關掉。
但是關閉不會發生,服務器仍然在請求回滾方法中被阻塞。 只要我想要,我可以使用我的代理。
,但如果我創建另一個客戶端,在第一次遠程調用,服務器將關閉,客戶端將引發錯誤:
Pyro4.errors.ConnectionClosedError: receiving: not enough data
我所有的測試都在說,我需要創建一個第二代理並拋出這個exeption來傳遞requestloop到我的服務器上。
有沒有人有如何清理這個問題的想法?
它只是工作正常。非常感謝你。 我讀過一些關於TIMEOUT的文檔,說requestloop有3秒的超時時間。也許是舊版本? – ornoone 2011-12-15 09:07:39