熊猫数据框RPYC上的腌菜非常慢

时间:2019-04-10 12:39:02

标签: python pandas server pickle rpyc

我正在尝试通过服务器(Rpyc)将大熊猫数据帧写入Hdf5。数据帧是从客户端发送的。 我发现,在将对象附加到Hdf5Store之前,应该使用rpyc.classic.obtain()释放对象。如果我不解雇,大熊猫会抛出一个错误,因为它是netref对象。

对于较小的数据帧,解串速度更快,但是,当数据帧大小很大时,解串和附加将花费大量时间。是否可以解决此问题?

还是我应该使用其他方法?我在下面附加了一个最小的示例:

环境     rpyc 4.0.2     熊猫0.24.2     python 3.7.3     Windows

最小示例

服务器:

import logging
import rpyc

class DummyServer(rpyc.Service):

    def on_connect(self,conn):
        print("Starting Server")
        pass

    def on_disconnect(self,conn):
        pass

    def exposed_write_data(self,dataframe):
        data = pd.HDFStore("Test.h5")
        start = time.time()
        realdata = rpyc.classic.obtain(dataframe)
        end = time.time()
        print(end-start)
        data.append("DATA",realdata)
        print("Writing Data Completed")
        data.close()


if __name__ == "__main__":
    t = ThreadedServer(DummyServer(), port=18860,protocol_config = 
    rpyc.core.protocol.DEFAULT_CONFIG)
    t.start()

客户:

import rpyc
import pandas as pd
rpyc.core.protocol.DEFAULT_CONFIG['allow_pickle'] = True

conn = rpyc.connect("localhost",18860, config=rpyc.core.protocol.DEFAULT_CONFIG)
server = conn.root

import datetime
import pandas as pd
import numpy as np

N = 10000
M = 10000

todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(N), periods=N, freq='D')
columns = [str(x) for x in range(M)]
data = np.array([np.arange(N)]*M).T
df = pd.DataFrame(data, index=index, columns=columns)

server.write_data(df)

0 个答案:

没有答案