Я пытаюсь написать класс сервера rpyc, который получает функцию обратного вызова от клиента rpyc и вызывает ее в другом потоке. У меня нет недостатка. Может кто-нибудь объяснить мне, что не так?
Вот простой концептуальный пример:
Сервер:
import rpyc
import threading
import time
class srv(rpyc.Service):
def __init__(self):
self.callback=None
def on_connect(self, conn):
print ('Connected to rpyc.')
self.callback=None
def on_disconnect(self, conn):
self.callback=None
print ('Disconnected from rpyc.')
def exposed_set_callback(self,callback):
self.callback=callback
print (self.callback)
self.callback('Callback set')
def other_loop(self,sleep_time=1):
while True:
if self.callback: # want to call callback here
print('Calling callback')
self.callback('Hello callback')
else:
print('Callback is not set')
time.sleep(sleep_time)
if __name__ == '__main__':
server=srv()
rpyc_server=rpyc.utils.server.ThreadedServer(server, port=18861)
t = threading.Thread(target = rpyc_server.start)
t1 = threading.Thread(target = server.other_loop)
t.start()
t1.start()
t.join()
t1.join()
Клиент:
import rpyc
def callback(text):
print(text)
c = rpyc.connect("localhost", 18861)
c.root.exposed_set_callback(callback)
Вывод серверадо подключения клиента:
Callback is not set
Callback is not set
Callback is not set
Выход клиента при подключении:
Callback set
Ошибка сервера после подключения клиента:
Connected to rpyc.
<function callback at 0x000001AD3B505B70>
Calling callback
Exception in thread Thread-6:
raise AsyncResultTimeout("result expired")
TimeoutError: result expired
Буду признателен за любую помощь. Благодарю.