__call __ () 1 argument de position requis manquant: "envoyer" FastAPI sur App Engine
Aug 15 2020
Lorsque vous essayez d'héberger une API sur App Engine, l'erreur suivante continue de se produire. Le programme fonctionnait sur Flask qui fonctionnait mais très lentement.
Erreur:
"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'
"
Fichier 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
Réponses
1 DustinIngram Aug 18 2020 at 01:36
App Engine requiert que votre main.py
fichier déclare une app
variable qui correspond à une application WSGI .
Étant donné que FastAPI est un framework Web asynchrone, il n'est pas compatible avec WSGI (qui est synchrone).
Votre meilleure option serait d'utiliser un service tel que Cloud Run , qui vous permettrait de définir votre propre environnement d'exécution et d'utiliser un serveur HTTP asynchrone compatible avec FastAPI.