Могут ли работники gevent использоваться в стандартной среде ядра приложения Python 3? - PullRequest
0 голосов
/ 04 января 2019

Попытка их использования приводит к следующей ошибке:

Traceback (most recent call last):
  File "/env/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/env/lib/python3.7/site-packages/gunicorn/workers/ggevent.py", line 196, in init_process
    self.patch()
  File "/env/lib/python3.7/site-packages/gunicorn/workers/ggevent.py", line 75, in patch
    fileno=s.sock.fileno()))
  File "/env/lib/python3.7/site-packages/gevent/_socket3.py", line 114, in __init__
    self._sock = self._gevent_sock_class(family, type, proto, fileno)
OSError: [Errno 92] Protocol not available: 'protocol'

Разве сокеты не поддерживаются в среде python 3?Это причина того, что это не сработает?

Мое приложение тратит много времени на другие веб-серверы, поэтому использование асинхронных рабочих необходимо для нормальной работы.В то же время я попытаюсь использовать eventlet работников.

РЕДАКТИРОВАТЬ: Включая некоторые дополнительные контексты вокруг использования

app.yaml

runtime: python37
instance_class: F2

entrypoint: gunicorn -c gunicorn.conf.py -b :$PORT my_project.server:app

gunicorn.conf.py

# Recommended number of workers based on instance size:
# https://cloud.google.com/appengine/docs/standard/python3/runtime#entrypoint_best_practices
workers = 2
# Use an asynchronous worker as most of the work is waiting for websites to load
worker_class = 'gevent'

Поскольку это происходит во время запуска Gunicorn, я не верю, что контекст определения приложения будет полезен.Однако для полноты картины я запускаю базовое приложение для колб.Что-то вроде:

my_project / server.py

from flask import Flask

from my_project.handlers import run

app = Flask(__name__)
app.register_blueprint(run, url_prefix='/run')

1 Ответ

0 голосов
/ 24 апреля 2019

У меня была такая же ошибка.Я думаю, что мы ограничены GAE Flexible или Cloud Run на GKE , если мы хотим использовать gevent .

GAE Standard работает в песочнице ( gVisor ), и некоторые операции ограничены (я заметил, что при этом Cloud Run , который имел ту же проблему с gevent )

Вот ошибка, которую вы видите:

Container Sandbox Limitation: Unsupported syscall 
getsockopt(0x5,0x1,0x26,0x7e11bd8ddf20,0x7e11bd8ddf24,0x4)
...