Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何使用flask发送和接收大型numpy阵列(数GB)_Json_Python 3.x_Flask_Python Requests_Protocol Buffers - Fatal编程技术网

Json 如何使用flask发送和接收大型numpy阵列(数GB)

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

我正在创建一个本地使用的微型服务。从一些输入中,我每次生成一个大矩阵。现在我正在使用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/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受限的应用程序

一种解决方案是异步处理请求。意思是:

  • 服务器接收请求并返回一个202 ACCEPTED和链接,客户端可以在该链接中检查矩阵的创建进度

  • 客户端检查返回的url,该url可以是:

    • 如果尚未创建矩阵,则为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
    。这里有一个与此相关的问题