呼叫grpc服务时,gevent会被屏蔽吗?

问题描述 投票:0回答:0

代码在这里。

import gevent
from gevent import monkey
import sys
import json
import grpc
sys.path.insert(0, './')
from grpc_gen import monk_pb2, monk_pb2_grpc
import random
import time
import logging
import requests
monkey.patch_all()
monkey.patch_socket()
# from multiprocessing import Pool

def detect_images_from_file(rule_id, user_info, grpc_address,index):
    """
    @image: image file bytes
    """
    # gevent.sleep(random.randint(1, 8) * 0.001)
    # gevent.sleep(0)
    with grpc.insecure_channel(grpc_address) as channel:
        stub = monk_pb2_grpc.RuleknockStub(channel)
        detect_request = monk_pb2.KnockRequest(rule_id=rule_id, user_info=user_info)
        detect_response = stub.knock(detect_request)
        bboxes = []
        result = json.loads(detect_response.result)
        ret_text = json.dumps(result, ensure_ascii=False)
        print(index,grpc_address)

def main():
    user_info = {
        "gender":
        2
    }
    user_info_text = json.dumps(user_info, ensure_ascii=False)

    g_list = []

    btime = time.time()
    for index, rule_id in enumerate(range(100)):
        random_adr = "monk_nginx:8466"
        # detect_images_from_file("code", user_info_text,"127.0.0.1:4089",index)
        gt_node = gevent.spawn(detect_images_from_file, "code", user_info_text,random_adr,index)
        g_list.append(gt_node)
    gevent.joinall(g_list)

    etime = time.time()
    used_time = int((etime - btime) * 1000)
    print(f'total {used_time}ms')



if __name__ == "__main__":
    main()

我启动了多个grpc服务实例,并使用nginx进行负载均衡,比如使用gevent同时调用多个服务,但我用上面的代码进行了测试。使用gevent的时间和串行调用的时间完全一样。好像是完全阻塞了。

为什么我使用gevent调用grpc服务和串行调用的运行时间是一样的?看来gevent调用完全被阻塞了.需要你的帮助......

python python-3.x grpc gevent
© www.soinside.com 2019 - 2024. All rights reserved.