Estou tentando implantar uma API Flask via Apache / mod_wsgi. A API usa o Gevent para fornecer simultaneidade para um método recursivo. No entanto, está jogando o seguinte erro
[Mon Feb 08 12:05:37 2016] [error] error: cannot switch to a different thread
[Mon Feb 08 12:05:37 2016] [error] <callback at 0x1094ee350 args=()> failed with error
A API inteira funciona bem usando o Gevent quando executada usando o servidor da Web integrado do Pycharm, e a API é executada corretamente usando o Apache / mod_wsgi quando não uso o gevent para fornecer a simultaneidade.
Eu suponho que isso deve ser executado no Apache, mas até agora não consegui encontrar uma solução. Eu continuo vendo menção de monkey patch, então eu adicionei esta linha ao módulo no qual gevent é chamado
from gevent import monkey; monkey.patch_all()
mas isso não parece ajudar.
Encontrei este bit em contêineres WSGI autônomos na documentação do Flask ( link ):
Gevent is a coroutine-based Python networking library that uses greenlet to provide a high-level synchronous API on top of libevent event loop:
from gevent.wsgi import WSGIServer
from yourapplication import app
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
Também diz que
There are popular servers written in Python that contain WSGI applications and serve HTTP. These servers stand alone when they run; you can proxy to them from your web server. Note the section on Proxy Setups if you run into issues.
Eu preciso eliminar o uso de mod_wsgi e usar o servidor WSGI embutido do Gevent e, em seguida, procurá-lo via Apache? Isso seria um PITA real, especialmente para lidar com problemas de CORS (temos uma interface web que acessa a API no mesmo servidor, e o proxy de uma porta diferente causaria problemas de origem cruzada - a menos que alguém possa me convencer do contrário). / p>
Qualquer insight sobre o que tentar em seguida seria mais apreciado.