Json 如何使用flask发送和接收大型numpy阵列(数GB)
我正在创建一个本地使用的微型服务。从一些输入中,我每次生成一个大矩阵。现在我正在使用json传输数据,但速度非常慢,成为我的应用程序的瓶颈 这是我的客户端:Json 如何使用flask发送和接收大型numpy阵列(数GB),json,python-3.x,flask,python-requests,protocol-buffers,Json,Python 3.x,Flask,Python Requests,Protocol Buffers,我正在创建一个本地使用的微型服务。从一些输入中,我每次生成一个大矩阵。现在我正在使用json传输数据,但速度非常慢,成为我的应用程序的瓶颈 这是我的客户端: headers={'Content-Type': 'application/json'} data = {'model': 'model_4', \ 'input': "this is my input."} r = requests.post("http://10.0.1.6:3000/api/getFeatureMa
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())
with open('binariy.file', 'rb') as f:
file = f.read()
response = requests.post('/endpoint', data=file)
如何发送大型矩阵?我认为问题在于矩阵的生成需要时间。它是一个CPU受限的应用程序 一种解决方案是异步处理请求。意思是:
- 如果尚未创建矩阵,则为200 OK响应
- 如果最终创建了矩阵,则为201创建的响应,并带有到资源的链接
但是,Flask一次处理一个请求。因此,您需要使用多线程、多处理或绿色线程。最后我使用了
np.save(matrix_path, mat)
return send_file(matrix_path+'.npy')
在客户端,我在加载矩阵之前保存矩阵。在客户端,您可以执行以下操作:
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())
with open('binariy.file', 'rb') as f:
file = f.read()
response = requests.post('/endpoint', data=file)
在服务器端:
import numpy as np
...
@app.route('/endpoint', methods=['POST'])
def endpoint():
filestr = request.data
file = np.fromstring(filestr)
以二进制方式发送数据怎么样?知道我该怎么做吗?如何将矩阵转换为二进制,以及如何在另一端正确接收矩阵?您可以检查python
array
module或numpy
。这里有一个与此相关的问题