i подключаюсь к клиенту с помощью RPyC и вызывает метод, открытый службой, с объектом параметра. Я хочу взять этот объект из разоблаченного метода и сделать с ним что-то, но этот объект слабо связан и в то время, когда я хочу получить доступ к его данным: я получаю ReferenceError, который сообщает мне, что объект «слабо ссылающийся объект нет дольше существует "Как изменить слабую ссылку на сильную ссылку?
Как я могу защитить объект со слабой ссылкой от сбора мусора? Как я могу изменить его, чтобы он был сильным?
server.py (отправка сообщений)
conn = rpyc.connect(ip,port)
bgsrv = rpyc.BgServingThread(conn)
conn.root.my_remote_method(a, b, c) # a,b,c are integer, strings etc.
time.sleep(0.2)
bgsrv.stop()
conn.close()
client.py (обработки данных и поместить его в очередь)
class MessageService(Service):
def exposed_my_remote_method(self, a, b, c):
ThreadedClient.queue.put([a,b,c])
other.py (чтение очереди)
def read_queue(self):
""" Handle all the messages currently in the queue (if any) """
while ThreadedClient.queue.qsize():
try:
msg = ThreadedClient.queue.get(0)
self.read_message(msg)
except Queue.Empty:
pass
def read_message(self, msg):
# do something with the data of a, b, c
res = msg[0] + xy # ReferenceError
После добавления этих строк я получил еще одну ошибку: «ValueError: травление отключено». Я нашел решение этой проблемы на [question26899050] (http://stackoverflow.com/questions/26899050/multiprocessing-python-with-rpyc-valueerror-pickling-is-disabled), которая должна добавить 'conn = rpyc.connect (ip, port, config = {"allow_public_attrs": True, "allow_pickle": True}) ' – Paula