Код
находится здесь:
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 полностью заблокирован. Нужна ваша помощь ...