Будет ли заблокирован gevent при звонке в сервис grp c? - PullRequest
0 голосов
/ 18 июня 2020
Код

находится здесь:

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()

Я запустил несколько экземпляров службы grp c и использовал nginx для балансировки нагрузки, например, используя gevent для одновременного вызова нескольких служб, но я протестировал его используя приведенный выше код. Время использования gevent точно такое же, как и у последовательного вызова. Кажется, он полностью заблокирован.

Почему я использую gevent для вызова службы grp c, а последовательные вызовы имеют одинаковое время работы? Похоже, вызов gevent полностью заблокирован. Нужна ваша помощь ...

...