__call __ () falta 1 argumento posicional obligatorio: 'enviar' FastAPI en App Engine
Aug 15 2020
Al intentar alojar una API en App Engine, sigue apareciendo el siguiente error. El programa solía ejecutarse en Flask, que funcionaba pero era muy lento.
Error:
"Traceback (most recent call last):
File "/env/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
self.handle_request(listener, req, client, addr)
File "/env/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
respiter = self.wsgi(environ, resp.start_response)
TypeError: __call__() missing 1 required positional argument: 'send'
"
Archivo Docker:
FROM gcr.io/google_appengine/python
RUN apt-get update && apt-get install -y ffmpeg
# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
RUN virtualenv /env -p python3.7
# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
# Add the application source code.
ADD . /app
CMD gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
app.yaml
runtime: custom
env: flex
entrypoint: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
service: encoder
runtime_config:
python_version: 3
handlers:
- url: /.*
script: auto
Respuestas
1 DustinIngram Aug 18 2020 at 01:36
App Engine requiere que su main.py
archivo declare una app
variable que corresponda a una aplicación WSGI .
Dado que FastAPI es un marco web asincrónico, no es compatible con WSGI (que es sincrónico).
Su mejor opción sería utilizar un servicio como Cloud Run , que le permitiría definir su propio tiempo de ejecución y utilizar un servidor HTTP asíncrono compatible con FastAPI.