__call __ () faltando 1 argumento posicional obrigatório: 'send' FastAPI no App Engine
Ao tentar hospedar uma API no App Engine, o seguinte erro sempre aparece. O programa costumava ser executado no Flask, que estava funcionando, mas muito lento.
Erro:
"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'
"
Arquivo 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
Respostas
1 DustinIngram
O App Engine requer que seu main.py
arquivo declare uma app
variável que corresponde a um aplicativo WSGI .
Como FastAPI é uma estrutura da web assíncrona, não é compatível com WSGI (que é síncrono).
Sua melhor opção seria usar um serviço como o Cloud Run , que permitiria definir seu próprio tempo de execução e usar um servidor HTTP assíncrono compatível com FastAPI.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino