1
我使用RPyC連接到客戶端,並使用參數對象調用服務公開方法。我想從暴露的方法中獲取這個對象,並用它做一些事情,但是這個對象是弱引用的,並且當時我想訪問它的數據:我得到一個ReferenceError,它告訴我對象「弱引用對象no更長的存在「如何將弱引用改爲強引用?
我怎樣才能安全的垃圾收集弱引用的對象?我怎樣才能改變它是強引用?
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