Поскольку проблема совместимости gevent / grpc была исправлена, я пытался ее использовать.
Я протестировал ее с помощью образца сценария
from gevent import monkey
monkey.patch_all()
import grpc._cython.cygrpc
grpc._cython.cygrpc.init_grpc_gevent()
import grpc
import time
import sys
channel = grpc.insecure_channel('localhost:5000')
stub =hello_word_pb2_grpc.HelloWordStub(channel)
data = hellow_word_pb2.HelloWorld()
num_requests=3000
start=time.time()
futures = []
# Make async requests
for i in range (num_requests):
futures.append(stub.HelloWorld.future(req))
# Wait for the requests to complete
for i in range (num_requests):
try:
result = futures[i].result()
# Do something with the result
except Exception as e:
print(e)
end = time.time()
print(end - start)
Теперь без этого патча
import grpc._cython.cygrpc
grpc._cython.cygrpc.init_grpc_gevent()
требуется 0,456701040268 секунд, чтобы завершить 3000 запросов
Теперь с патчем
import grpc._cython.cygrpc
grpc._cython.cygrpc.init_grpc_gevent()
требуется 1,06 секунды.
Любые предложения, что может пойтичто-то не так с патчем совместимости.
Очевидно, что если я уменьшу количество запросов до 1000 и сделаю 3 вызова с 1000 асинхронными запросами в каждом вызове, то время, необходимое для общего количества 3000 запросов, будет меньше, чем 1,06.Но я хотел знать, что заставляет исправление делать это так медленно?
Я нашел нечто подобное, упомянутое здесь - https://github.com/grpc/grpc/blob/master/src/python/grpcio_tests/commands.py#L115
Это связано?