2017-02-23 59 views
0

我已經使用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級兩者之間的幅度差的?客戶不做任何事情,但要求圖像..

謝謝!

+0

您的服務器代碼存在錯誤; 「圖像」沒有在get_batch –

+0

中定義這是因爲我刪除了所有處理代碼以使其更具可讀性,因爲它與客戶端服務器的性能無關 – powder

回答