У меня есть некоторые проблемы с методом requestLoop объекта Pyro4.Daemon.
Мне нужно удаленно вызвать метод "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()
КЛИЕНТ
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 на моем сервере.
Есть ли у кого-нибудь представление о том, как устранить эту проблему?