同一台主机上的 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
我已经使用 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