同一台主机上的 Pyro 通信速度极慢

Pyro communication extremely slow on the same host

我已经使用 Pyro 实现了一个非常简单的 client/server 应用程序。虽然 Pyro tips&tricks 建议不要这样做,但我正在使用服务器将图像发送到客户端(准确地说是未压缩的 numpy 数组)。它不必通过网络,一切都在本地主机上,所以我看不出有什么问题。发生的事情是客户端比服务器慢 1 个数量级,知道为什么吗?

这里是代码:

服务器:

import numpy as np
import time
import Pyro.core

class DataProd(Pyro.core.ObjBase):
    def __init__(self, batch_size):
        print 'Loading data into memory'
        self.all_imgs = np.load('data.npy')
        Pyro.core.ObjBase.__init__(self)

    def get_batch(self, batch_size=32, flip=False):

        print 'getting 1 batch from PYRO'
        s = time.time()
        #process the images
        print time.time()-s
        return images


def main():
    Pyro.core.initServer()
    daemon=Pyro.core.Daemon()
    uri=daemon.connect(DataProd(32),'dataprod')
    print "The daemon runs on port:",daemon.port
    print "The object's uri is:",uri
    print "Starting request loop"
    daemon.requestLoop()

if __name__ == '__main__':
    main()

和客户:

import Pyro.core
import time

data = Pyro.core.getProxyForURI("PYROLOC://localhost:7766/dataprod")
while True:
    s = time.time()
    im = data.get_batch(32)
    print time.time()-s

服务器打印:

getting 1 batch from PYRO
0.526908874512
getting 1 batch from PYRO
0.51292014122
getting 1 batch from PYRO
0.523808956146
getting 1 batch from PYRO
0.536481142044
getting 1 batch from PYRO
0.518028974533

而客户:

4.93717813492
4.05996489525
3.40680289268
3.79327297211
3.99453115463

为什么两者相差1个数量级?客户端除了请求图片之外什么都不做..

谢谢!

您是否进行了分析以查看客户端中感知到的减速发生的确切位置?

我怀疑大型 numpy 数据的反序列化是导致此问题的原因。阅读此 https://pythonhosted.org/Pyro4/tipstricks.html#pyro-and-numpy