我对Pyro4.Daemon对象的requestLoop方法有一些问题。在
我想要的是远程调用一个“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()
客户
^{pr2}$我希望看到服务器打印“hello”和“another hi”,然后关闭。在
但是关闭没有发生,服务器仍然被阻塞在requestloop方法中。 我可以随时使用我的代理人。在
但是,如果我创建另一个客户端,在第一次远程调用时,服务器将关闭,客户端将抛出一个错误:
Pyro4.errors.ConnectionClosedError: receiving: not enough data
我的所有测试都是说,我需要创建第二个代理,并抛出在服务器上传递requestloop的execption。在
有人知道如何清理这个问题吗?在
如果您查看源代码中的
examples/callback/client.py
,您将看到以下注释:因此,您需要做的是在服务器文件中设置
COMMTIMEOUT
,根据我的测试,它将正常工作。在注意:您还可以将
print
语句添加到still_running
方法中,以检查它何时被调用。如果没有上面的配置,您将看到只有在接收到新事件时才会执行该方法,因此在接收到将running
设置为False
的下一个事件之后,服务器不会关闭。例如,如果您执行客户机程序两次,服务器将关闭。在相关问题 更多 >
编程相关推荐