У меня RPC-сервер, использующий zerorpc в Python, написанный таким образом
import zerorpc
from service import Service
print('RPC server - loading')
def main():
print('RPC server - main')
s = zerorpc.Server(Service())
s.bind("tcp://*:4242")
s.run()
if __name__ == "__main__" : main()
Работает нормально при создании клиента
import zerorpc, sys
client_rpc = zerorpc.Client()
client_rpc.connect("tcp://127.0.0.1:4242")
name = sys.argv[1] if len(sys.argv) > 1 else "dude"
print(client_rpc.videos('138cd9e5-3c4c-488a-9b6f-49907b55a040.webm'))
и запускает его. Print () выводит то, что возвращает эта функция 'videos'.
Но когда я пытаюсь использовать этот же код внутри маршрута из приложения Flask, я получаю следующую ошибку:
Файл "src / gevent / __ greenlet_primitives.pxd", строка 35, в
GEvent .__ greenlet_primitives._greenlet_switch
gevent.exceptions.LoopExit: эта операция навсегда заблокирует Hub:
Метод колбы / выдержка
import zerorpc, sys
client_rpc = zerorpc.Client()
client_rpc.connect("tcp://127.0.0.1:4242")
@app.route('/videos', methods=['POST'])
def videos():
global client_rpc
client_rpc.videos('138cd9e5-3c4c-488a-9b6f-49907b55a040.webm')
Я не могу выяснить, что может происходить. Я новичок в Python и понимаю, что это может иметь какое-то отношение к Flask и тому, как он обрабатывает поток, но я не могу понять, как его решить.