2017-02-28 80 views
4

我正在創建一個本地使用的微服務。從一些輸入中,我每次都會生成一個大矩陣。現在我正在使用json傳輸數據,但速度很慢,成爲我應用程序的瓶頸。如何使用燒瓶發送和接收大的numpy陣列(幾個GB)

這裏是我的客戶端:

headers={'Content-Type': 'application/json'} 

data = {'model': 'model_4', \ 
     'input': "this is my input."} 

r = requests.post("http://10.0.1.6:3000/api/getFeatureMatrix", headers=headers, data=json.dumps(data)) 

answer = json.loads(r.text) 

我的服務器是一樣的東西:

app = Flask(__name__, static_url_path='', static_folder='public') 

@app.route('/api/getFeatureMatrix', methods = ['POST']) 
def get_feature_matrix(): 
    arguments = request.get_json() 
    #processing ... generating matrix 
    return jsonify(matrix=matrix.tolist()) 

如何發送大矩陣?

+2

將數據作爲二進制發送怎麼樣? – metmirr

+0

我怎麼能做到這一點的任何想法?我怎樣才能將我的矩陣轉換爲二進制文件,以及如何在另一端正確接收它? – user3091275

+1

你可以檢查python'array'模塊或'numpy'。這是一個與它相關的問題http://stackoverflow.com/questions/751055/binary-array-in-python – metmirr

回答

0

最後,我結束了使用

np.save(matrix_path, mat) 
return send_file(matrix_path+'.npy') 

在客戶端我省矩陣加載它。

0

我想問題是矩陣需要時間來生成。這是一個CPU綁定應用程序

一個解決方案是異步處理請求。這意味着:

  1. 服務器接收請求,並返回202接受,並鏈接到客戶端可以檢查創建矩陣

  2. 客戶的進度檢查返回的URL他要麼得到:

    • 如果矩陣尚未創建
    • 一個201創建的響應,如果最終產生的矩陣,與鏈接到資源200 OK響應

但是,Flask一次處理一個請求。所以你需要使用多線程或多處理或greenthreads。