1

我目前正在 RPYC 服务器上生成一个数据帧,以及在请求时将其发送给客户端的内容。当我通过服务器发送它时,它作为 netref 对象发送。我希望能够将其存储为客户端的局部变量,而不是作为参考。似乎 RPYC 有一个内置的 pickle 协议,我尝试使用它但收效甚微。最终目标是能够在客户端绘制此数​​据框。数据帧的数据采集是特定于硬件的,为了当前的问题,刚刚将样本数据加载为 csv。

这是服务器代码

import rpyc
from rpyc.utils.server import ThreadedServer # or ForkingServer
import pandas as pd

class MyService(rpyc.Service):
   
        
    def exposed_Dataframe_send(self):
        
        resultsDF = pd.read_csv("Shared/PMBUS_Logging.csv")
        print(type(resultsDF))
        return resultsDF
      

if __name__ == "__main__":
    server = ThreadedServer(MyService, port=18861, protocol_config={
    'allow_public_attrs': True, "allow_pickle":True
})
server.start()

客户端代码

import rpyc
c = rpyc.connect("localhost", 18861, config={"allow_public_attrs": True, "allow_pickle":True})

x = c.root.Dataframe_send()
print(x)
print(type(x))

x.plot(figsize=[20,15])

任何帮助表示赞赏

4

1 回答 1

0

在客户端上,您得到的不是真实对象,而是数据帧的 netref,它几乎与真实数据帧完全相同。我试过了,在客户端我可以做到:

obj = x.iloc[10]

这给了我正确的结果。如果你想在客户端重新创建原生数据框,你可以获取数据并转换:

import pandas as pd
...
x = c.root.Dataframe_send()
js = x.to_json(orient='split')
df = pd.read_json(js, orient='split')
df.plot(figsize=[20,15])

然后,如果它仍然不起作用,则问题出在其他地方。

于 2021-04-16T08:31:52.270 回答