背景
mnist client中的程序是关于
与加载了mnist模型的tensorflow_model_server进行通信的客户端。
客户端下载mnist数据集的测试图像,并通过以下方式查询服务
通过这样的测试图像获得预测,并计算出推断错误率。
问题
我很难理解gRPC从客户端发出的并发请求。
for _ in range(num_tests): # <==
request = predict_pb2.PredictRequest()
request.model_spec.name = 'mnist'
request.model_spec.signature_name = 'predict_images'
image, label = test_data_set.next_batch(1)
request.inputs['images'].CopyFrom(
tf.make_tensor_proto(image[0], shape=[1, image[0].size]))
result_counter.throttle() # <==
result_future = stub.Predict.future(request, 5.0) # 5 seconds
result_future.add_done_callback(
_create_rpc_callback(label[0], result_counter))
根据我的理解,以上代码在for循环中按顺序执行。我已阅读有关条件变量的文章,并锁定Python。由于我什至没有看到定义多个线程来发送请求,所以即使将标志设置为10,我也认为代码与并发无关。([Define concurrency)
如果有一些误解,我可能会忽略gRPC。
如果代码不是真正的并发,如何使其正确?
gRPC Python使用后台线程从较低级别轮询消息。为了同时运行RPC,您可以在线程中创建多个RPC期货。当任何RPC完成时(后台线程收集的结果),您的回调将被调用。
希望这会有所帮助,请随时询问更多详细信息。