我已經使用Pyro實現了一個非常簡單的客戶端/服務器應用程序。雖然Pyro tips&tricks建議反對它,但我使用服務器將圖像發送到客戶端(精確地說是未壓縮的numpy數組)。它不需要通過網絡,一切都停留在本地主機上,所以我不會看到問題。發生什麼事是客戶端比服務器慢1個數量級,有什麼想法爲什麼?Pyro通信在同一主機上極其緩慢
下面的代碼:
服務器:
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級兩者之間的幅度差的?客戶不做任何事情,但要求圖像..
謝謝!
您的服務器代碼存在錯誤; 「圖像」沒有在get_batch –
中定義這是因爲我刪除了所有處理代碼以使其更具可讀性,因爲它與客戶端服務器的性能無關 – powder