Gunicorn: OSError: [Errno 9] НСвСрный дСскриптор Ρ„Π°ΠΉΠ»Π°.

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 10 сСнт. 2018  Β·  19ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: benoitc/gunicorn

Π£ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ raspbian

[2018-09-10 20:40:11 +0800] [21421] [ΠšΠ Π˜Π’Π˜Π§Π•Π‘ΠšΠ˜Π™] Π’Π Π•ΠœΠ― АУВА Π ΠΠ‘ΠžΠ’ΠΠ˜ΠšΠ (pid: 21699)
[2018-09-10 20:40:11 +0800] [21699] [ERROR] Запрос ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибки сокСта.
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
Π€Π°ΠΉΠ» "/usr/lib/python3/dist-packages/gunicorn/workers/async.py", строка 62, Π² дСскрипторС
six.reraise (* sys.exc_info ())
Π€Π°ΠΉΠ» "/usr/lib/python3/dist-packages/gunicorn/six.py", строка 625, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ поднимаСтся
ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ
Π€Π°ΠΉΠ» "/usr/lib/python3/dist-packages/gunicorn/workers/async.py", строка 35, Π² дСскрипторС
listener_name = listener.getsockname ()
OSError: [Errno 9] НСвСрный дСскриптор Ρ„Π°ΠΉΠ»Π°.

Feedback Requested Investigation

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

  1. Π― ΠΌΠΎΠ³Ρƒ воспроизвСсти эту ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΆΡƒΡ€Π½Π°Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ всСго лишь gunicorn ΠΈ uvicorn . Π­Ρ‚ΠΎ сообщСниС ΠΎΠ± ошибкС начинаСтся с uvicorn==0.11.4 Π° Π½Π΅ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии 0.11.3 (ΠΊΠ°ΠΊ Π² OSx, Ρ‚Π°ΠΊ ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Linux). Π­Ρ‚ΠΎ согласуСтся с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ ΠΎ uvicorn, Π³Π΄Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ вСрсии всСгда ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ 0.11.4 . Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² ΠΊΠΎΠ½Ρ†Π΅
  2. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° эту ΠΎΡˆΠΈΠ±ΠΊΡƒ, это ΠΎΠ΄Π½Π° . ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² этих Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строках Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ упомянутого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Ѐиксация измСняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ порядок Π΄Π²ΡƒΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°. Если я Π²Π΅Ρ€Π½Ρƒ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка, ошибка ΠΆΡƒΡ€Π½Π°Π»Π° исчСзнСт, ​​но всС ΠΆΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠΆΡƒ тСстовый Π½Π°Π±ΠΎΡ€ uvicorn
  3. Ρ‚Π° ΠΆΠ΅ самая ошибка ΠΆΡƒΡ€Π½Π°Π»Π° происходит, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ starlette ΠΈ fastapi ΠΏΠΎΠ²Π΅Ρ€Ρ… стСка gunicorn+uvicorn ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅; - запускаСт послСднюю Π²Π΅Ρ€ΡΠΈΡŽ uvicorn 12.X вмСсто 0.11.4 ; - запускаСт gunicorn с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ uvicorn worker

Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° . Π’ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Π½Π° osx запуститС ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹ΠΉ скрипт test.sh (ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π½Π° osx). Для тСстирования Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Linux сохранитС сцСнарий ΠΈ Ρ„Π°ΠΉΠ» Dockerfile, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° Dockerfile. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽ Π»ΠΎΠ³ скрипта.

@benoitc , Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ± этой фиксации Π² uvicorn которая, каТСтся, вносит ΠΎΡˆΠΈΠ±ΠΊΡƒ? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π² интСрфСйсС ΠΌΠ΅ΠΆΠ΄Ρƒ gunicorn ΠΈ uvicorn . НС ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ порядок Π΄Π²ΡƒΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅, упомянутом Π²Ρ‹ΡˆΠ΅ Π² uvicorn ? Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это происходит ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях. Π”ΠΎ сих ΠΏΠΎΡ€ ΠΎΠ± этом ΡΠΎΠΎΠ±Ρ‰Π°Π»ΠΎΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ с aiohttp , gevent , Flask-SocketIO sanic . Для удобства ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» сцСнария.

log_test.log

Ρ„Π°ΠΉΠ» _test.sh_

#!/bin/bash
python3 -m venv venv
source venv/bin/activate
pip install gunicorn==20.0.04 uvicorn==0.11.4
# create simple uvicorn app
printf "async def app(scope, receive, send):\n    await send()\n" > example.py
# spin up gunicorn with 1 uvicorn worker, and then send TERM signal to gunicorn
gunicorn example:app -w 1 -k uvicorn.workers.UvicornWorker &
sleep 5 && pkill -f gunicorn
sleep 1
# you will see 1 log entry like this one:
# [XX] [YY] [INFO] Error while closing socket [Errno 9] Bad file descriptor

printf "\n\n[INFO] if you instead bump down uvicorn's version from 11.4 to 11.3 [Errno 9] goes away:\n\n"
pip install uvicorn==0.11.3
gunicorn example:app -w 1 -k uvicorn.workers.UvicornWorker &
sleep 5 && pkill -f gunicorn

Ρ„Π°ΠΉΠ» _Dockerfile_

# run with:
# docker run -it $(docker build -q .)
FROM python:3.8
COPY test.sh .
RUN chmod +x /test.sh
CMD /test.sh

ВсС 19 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

@ leond08 Бпасибо Π·Π° Π±ΠΈΠ»Π΅Ρ‚!

НС ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ это происходит?

  • ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Gunicorn Π²Ρ‹ тСстируСтС
  • ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅
  • ΠΊΠΎΠ³Π΄Π° это происходит?

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ gunicorn3
Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ eventlet ΠΈ gevent для этого
я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ фляги - Flask-SocketIO

Π― Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ свою Ρ„ΠΎΠ½ΠΎΠ²ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠ°Π» ΠΊΠ½ΠΎΠΏΠΊΡƒ
Моя функция Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ - ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ событиС,
послС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«Π“ΠžΠ’ΠžΠ’ΠžΒ» фоновая Π·Π°Π΄Π°Ρ‡Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ
Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ сообщСниС всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ

Π‘Ρ‹Π»Π° такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с aiohttp + gunicorn, Π½Π°Π±Π»ΡŽΠ΄Π°ΠΉΡ‚Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ сообщСниС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ctrl + c.

[INFO] Ошибка ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ сокСта [Errno 9] НСвСрный дСскриптор Ρ„Π°ΠΉΠ»Π°

Π― Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡŽ. Π― ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅.

Π£ нас Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² 1 ΠΈΠ· 8 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π² Ρ€ΠΎΠ΅ Π΄ΠΎΠΊΠ΅Ρ€ΠΎΠ².

ΠœΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ с 1 ΠΈΠ· 9 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ это связано с docker, python3 ΠΈ gevent.

Gunicorn 20.0.4 + aiohttp 3.6.2

Gunicorn Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ сСрвСр Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:

gunicorn --reload app:make_app --bind localhost:5000 --worker-class aiohttp.GunicornWebWorker --workers 2 --access-logfile -

ΠŸΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ctrl + C заканчиваСтся Π½Π°

^C[2020-05-23 21:49:50 +0200] [38524] [INFO] Handling signal: int
Exception ignored when trying to write to the signal wakeup fd:
Exception ignored when trying to write to the signal wakeup fd:
Traceback (most recent call last):
  File "/usr/lib/python3.8/asyncio/unix_events.py", line 42, in _sighandler_noop
Traceback (most recent call last):
  File "/usr/lib/python3.8/asyncio/unix_events.py", line 42, in _sighandler_noop
    def _sighandler_noop(signum, frame):
    def _sighandler_noop(signum, frame):
OSError: [Errno 9] Bad file descriptor
OSError: [Errno 9] Bad file descriptor
[2020-05-23 21:49:50 +0200] [38526] [INFO] Worker exiting (pid: 38526)
[2020-05-23 21:49:50 +0200] [38528] [INFO] Worker exiting (pid: 38528)
[2020-05-23 21:49:50 +0200] [38524] [INFO] Shutting down: Master

НС ΠΈΠΌΠ΅Π΅Ρ‚ значСния, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ запрос ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π‘ Sanic 20.3.0:

^C[2020-05-26 13:24:55 +0200] [27706] [INFO] Handling signal: int
[2020-05-26 13:24:55 +0200] [27769] [INFO] Stopping server: 27769, connections: 0
[2020-05-26 13:24:55 +0200] [27769] [INFO] Error while closing socket [Errno 9] Bad file descriptor
[2020-05-26 13:24:55 +0200] [27769] [INFO] Worker exiting (pid: 27769)
[2020-05-26 13:24:55 +0200] [27771] [INFO] Stopping server: 27771, connections: 0
[2020-05-26 13:24:55 +0200] [27771] [INFO] Error while closing socket [Errno 9] Bad file descriptor
[2020-05-26 13:24:55 +0200] [27771] [INFO] Worker exiting (pid: 27771)
[2020-05-26 13:24:55 +0200] [27706] [INFO] Shutting down: Master

Π’ΠΎ ΠΆΠ΅ самоС ΠΈ с Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ классом Gunicorn 20.0.4 + Uvicorn 0.11.5 Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ctrl + C

INFO:     [12621] [gunicorn.error] Handling signal: int
INFO:     [12635] [gunicorn.error] Error while closing socket [Errno 9] Bad file descriptor
INFO:     [12634] [gunicorn.error] Error while closing socket [Errno 9] Bad file descriptor
INFO:     [12635] [gunicorn.error] Worker exiting (pid: 12635)
INFO:     [12634] [gunicorn.error] Worker exiting (pid: 12634)
INFO:     [12621] [gunicorn.error] Shutting down: Master

ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния? Π’Π°ΠΊΠΆΠ΅ ΠΎ ΠΊΠ°ΠΊΠΎΠΉ вСрсии Python ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ?

Ubuntu 20.04, систСма прСдоставила Python 3.8.2 Π² virtualenv

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния: https://github.com/zgoda/newsloop-server/tree/d603a1c10c9e8be3d998f62ccc55dd73f4677115 (с aiohttp) ΠΈΠ»ΠΈ https://github.com/zgoda/newsloop-server/tree/b09b2a8a8a7 Π’ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Ρ‹Π² ΠΏΡƒΠ»Π΅ΠΌΠ΅Ρ‚Ρ‡ΠΈΠΊΠ° Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.

Различия Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ aiohttp ΠΈ Sanic Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ мСня ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ с Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ.

Π’Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, python 3.8.0
sanic 19.12.2
Gunicorn 20.0.4

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ: это происходит, ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ локально Π½Π° своСм Mac, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈ запускС Π² Π΄ΠΎΠΊΠ΅Ρ€Π΅ Linux, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,
Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° https://github.com/benoitc/gunicorn/issues/2064 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹.
Π£ нас ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π΅ ΠΆΠ΅ ошибки, Ρ‡Ρ‚ΠΎ ΠΈ Π² issue, Π½ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ gunicorn - 19.9.0

Π― Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽ это, FastAPI + новСйшиС Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Gunicorn ΠΈ uvicorn с Python 3.8.5

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ я пСрСстану ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ uvicorn (Ρ‚.Π΅. ΡƒΠ΄Π°Π»ΡŽ эту строку ΠΈΠ· ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ gunicorn):

worker_class = "uvicorn.workers.UvicornWorker"

Ошибки ΠΈΡΡ‡Π΅Π·Π°ΡŽΡ‚.

Как описано Π²Ρ‹ΡˆΠ΅, это происходит ΠΏΡ€ΠΈ остановкС Gunicorn с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ctrl + C ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ изящного сигнала уничтоТСния Π½Π° PID.

[2020-09-12 11:56:37 +1000] [100390] [INFO] Starting gunicorn 20.0.4
[2020-09-12 11:56:37 +1000] [100390] [INFO] Listening at: http://0.0.0.0:6000 (100390)
[2020-09-12 11:56:37 +1000] [100390] [INFO] Using worker: uvicorn.workers.UvicornWorker
[2020-09-12 11:56:37 +1000] [100392] [INFO] Booting worker with pid: 100392
[2020-09-12 11:56:38 +1000] [100392] [INFO] Started server process [100392]
[2020-09-12 11:56:38 +1000] [100392] [INFO] Waiting for application startup.
[2020-09-12 11:56:38 +1000] [100392] [INFO] Application startup complete.
[2020-09-12 11:56:48 +1000] [100390] [INFO] Handling signal: term
[2020-09-12 11:56:48 +1000] [100392] [INFO] Shutting down
[2020-09-12 11:56:48 +1000] [100392] [INFO] Error while closing socket [Errno 9] Bad file descriptor
[2020-09-12 11:56:48 +1000] [100392] [INFO] Waiting for application shutdown.
[2020-09-12 11:56:48 +1000] [100392] [INFO] Application shutdown complete.
[2020-09-12 11:56:48 +1000] [100392] [INFO] Finished server process [100392]
[2020-09-12 11:56:48 +1000] [100392] [INFO] Worker exiting (pid: 100392)
[2020-09-12 11:56:48 +1000] [100390] [INFO] Shutting down: Master

Π’ΠΎΡ‚ точная копия ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

[fots<strong i="6">@workstation</strong> testing]$ python3.8 -V
Python 3.8.5
[fots<strong i="7">@workstation</strong> testing]$ python3.8 -m venv ~/.virtualenv/testing
[fots<strong i="8">@workstation</strong> testing]$ source ~/.virtualenv/testing/bin/activate
(testing) [fots<strong i="9">@workstation</strong> testing]$ pip install fastapi gunicorn uvicorn
Collecting fastapi
  Using cached fastapi-0.61.1-py3-none-any.whl (48 kB)
Collecting gunicorn
  Using cached gunicorn-20.0.4-py2.py3-none-any.whl (77 kB)
Collecting uvicorn
  Using cached uvicorn-0.11.8-py3-none-any.whl (43 kB)
Collecting pydantic<2.0.0,>=1.0.0
  Using cached pydantic-1.6.1-cp38-cp38-manylinux2014_x86_64.whl (11.5 MB)
Collecting starlette==0.13.6
  Using cached starlette-0.13.6-py3-none-any.whl (59 kB)
Requirement already satisfied: setuptools>=3.0 in /home/fots/.virtualenv/testing/lib/python3.8/site-packages (from gunicorn) (47.1.0)
Collecting h11<0.10,>=0.8
  Using cached h11-0.9.0-py2.py3-none-any.whl (53 kB)
Collecting websockets==8.*
  Using cached websockets-8.1-cp38-cp38-manylinux2010_x86_64.whl (78 kB)
Collecting httptools==0.1.*; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy"
  Using cached httptools-0.1.1-cp38-cp38-manylinux1_x86_64.whl (227 kB)
Collecting uvloop>=0.14.0; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy"
  Using cached uvloop-0.14.0-cp38-cp38-manylinux2010_x86_64.whl (4.7 MB)
Collecting click==7.*
  Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Installing collected packages: pydantic, starlette, fastapi, gunicorn, h11, websockets, httptools, uvloop, click, uvicorn
Successfully installed click-7.1.2 fastapi-0.61.1 gunicorn-20.0.4 h11-0.9.0 httptools-0.1.1 pydantic-1.6.1 starlette-0.13.6 uvicorn-0.11.8 uvloop-0.14.0 websockets-8.1
WARNING: You are using pip version 20.1.1; however, version 20.2.3 is available.
You should consider upgrading via the '/home/fots/.virtualenv/testing/bin/python3.8 -m pip install --upgrade pip' command.
(testing) [fots<strong i="10">@workstation</strong> testing]$ ls -l
total 4
-rw-rw-r-- 1 fots fots 117 Sep 12 12:13 main.py
(testing) [fots<strong i="11">@workstation</strong> testing]$ cat main.py
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}
(testing) [fots<strong i="12">@workstation</strong> testing]$ gunicorn -k uvicorn.workers.UvicornWorker main:app
[2020-09-12 12:19:05 +1000] [105788] [INFO] Starting gunicorn 20.0.4
[2020-09-12 12:19:05 +1000] [105788] [INFO] Listening at: http://127.0.0.1:8000 (105788)
[2020-09-12 12:19:05 +1000] [105788] [INFO] Using worker: uvicorn.workers.UvicornWorker
[2020-09-12 12:19:05 +1000] [105790] [INFO] Booting worker with pid: 105790
[2020-09-12 12:19:05 +1000] [105790] [INFO] Started server process [105790]
[2020-09-12 12:19:05 +1000] [105790] [INFO] Waiting for application startup.
[2020-09-12 12:19:05 +1000] [105790] [INFO] Application startup complete.
^C[2020-09-12 12:19:06 +1000] [105788] [INFO] Handling signal: int
[2020-09-12 12:19:06 +1000] [105790] [INFO] Shutting down
[2020-09-12 12:19:06 +1000] [105790] [INFO] Error while closing socket [Errno 9] Bad file descriptor
[2020-09-12 12:19:06 +1000] [105790] [INFO] Waiting for application shutdown.
[2020-09-12 12:19:06 +1000] [105790] [INFO] Application shutdown complete.
[2020-09-12 12:19:06 +1000] [105790] [INFO] Finished server process [105790]
[2020-09-12 12:19:06 +1000] [105790] [INFO] Worker exiting (pid: 105790)
[2020-09-12 12:19:07 +1000] [105788] [INFO] Shutting down: Master

И Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ pip freeze :

click==7.1.2
fastapi==0.61.1
gunicorn==20.0.4
h11==0.9.0
httptools==0.1.1
pydantic==1.6.1
starlette==0.13.6
uvicorn==0.11.8
uvloop==0.14.0
websockets==8.1

Π― попытался ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ uvicorn ΠΈ gunicorn с GitHub (основная Π²Π΅Ρ‚ΠΊΠ°), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» самыС послСдниС исправлСния, Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ исчСзла.

НадСюсь это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚
Ѐотис

  1. Π― ΠΌΠΎΠ³Ρƒ воспроизвСсти эту ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΆΡƒΡ€Π½Π°Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ всСго лишь gunicorn ΠΈ uvicorn . Π­Ρ‚ΠΎ сообщСниС ΠΎΠ± ошибкС начинаСтся с uvicorn==0.11.4 Π° Π½Π΅ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии 0.11.3 (ΠΊΠ°ΠΊ Π² OSx, Ρ‚Π°ΠΊ ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Linux). Π­Ρ‚ΠΎ согласуСтся с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ ΠΎ uvicorn, Π³Π΄Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ вСрсии всСгда ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ 0.11.4 . Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² ΠΊΠΎΠ½Ρ†Π΅
  2. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° эту ΠΎΡˆΠΈΠ±ΠΊΡƒ, это ΠΎΠ΄Π½Π° . ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² этих Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строках Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ упомянутого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Ѐиксация измСняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ порядок Π΄Π²ΡƒΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°. Если я Π²Π΅Ρ€Π½Ρƒ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка, ошибка ΠΆΡƒΡ€Π½Π°Π»Π° исчСзнСт, ​​но всС ΠΆΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠΆΡƒ тСстовый Π½Π°Π±ΠΎΡ€ uvicorn
  3. Ρ‚Π° ΠΆΠ΅ самая ошибка ΠΆΡƒΡ€Π½Π°Π»Π° происходит, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ starlette ΠΈ fastapi ΠΏΠΎΠ²Π΅Ρ€Ρ… стСка gunicorn+uvicorn ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅; - запускаСт послСднюю Π²Π΅Ρ€ΡΠΈΡŽ uvicorn 12.X вмСсто 0.11.4 ; - запускаСт gunicorn с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ uvicorn worker

Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° . Π’ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Π½Π° osx запуститС ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹ΠΉ скрипт test.sh (ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π½Π° osx). Для тСстирования Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Linux сохранитС сцСнарий ΠΈ Ρ„Π°ΠΉΠ» Dockerfile, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° Dockerfile. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽ Π»ΠΎΠ³ скрипта.

@benoitc , Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ± этой фиксации Π² uvicorn которая, каТСтся, вносит ΠΎΡˆΠΈΠ±ΠΊΡƒ? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π² интСрфСйсС ΠΌΠ΅ΠΆΠ΄Ρƒ gunicorn ΠΈ uvicorn . НС ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ порядок Π΄Π²ΡƒΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅, упомянутом Π²Ρ‹ΡˆΠ΅ Π² uvicorn ? Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это происходит ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях. Π”ΠΎ сих ΠΏΠΎΡ€ ΠΎΠ± этом ΡΠΎΠΎΠ±Ρ‰Π°Π»ΠΎΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ с aiohttp , gevent , Flask-SocketIO sanic . Для удобства ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» сцСнария.

log_test.log

Ρ„Π°ΠΉΠ» _test.sh_

#!/bin/bash
python3 -m venv venv
source venv/bin/activate
pip install gunicorn==20.0.04 uvicorn==0.11.4
# create simple uvicorn app
printf "async def app(scope, receive, send):\n    await send()\n" > example.py
# spin up gunicorn with 1 uvicorn worker, and then send TERM signal to gunicorn
gunicorn example:app -w 1 -k uvicorn.workers.UvicornWorker &
sleep 5 && pkill -f gunicorn
sleep 1
# you will see 1 log entry like this one:
# [XX] [YY] [INFO] Error while closing socket [Errno 9] Bad file descriptor

printf "\n\n[INFO] if you instead bump down uvicorn's version from 11.4 to 11.3 [Errno 9] goes away:\n\n"
pip install uvicorn==0.11.3
gunicorn example:app -w 1 -k uvicorn.workers.UvicornWorker &
sleep 5 && pkill -f gunicorn

Ρ„Π°ΠΉΠ» _Dockerfile_

# run with:
# docker run -it $(docker build -q .)
FROM python:3.8
COPY test.sh .
RUN chmod +x /test.sh
CMD /test.sh

Π£ мСня Π±Ρ‹Π»Π° Ρ‚ΠΎΡ‡Π½ΠΎ такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’ΠΎΡ‚ ΠΌΠΎΠΉ случай.

ΠšΡ€Π°Ρ‚ΠΊΠΎ: я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ тСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Django dwebsocket с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Gunicorn. Когда я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ websocket_client для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, послС закрытия websocket эта ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

ΠžΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π°Ρ обстановка :
ΠžΠ±Ρ€Π°Π· Π΄ΠΎΠΊΠ΅Ρ€Π°: python: 3.7
вСрсия python: python3.7.6
gunicorn: вСрсия = 20.0.4, Ρ€Π°Π±ΠΎΡ‚Π° = gevent
ВСрсия Django: Django == 2.2
вСрсия dwebsocket: 0.5.12

Код:

view.py

from dwebsocket import accept_websocket

<strong i="16">@accept_websocket</strong>
def my_ws(request):
    if request.is_websocket():
        ws = request.websocket
        while True:
            msg = ws.wait(timeout=15)
            if msg is None:
                print('get None message')
                break
            else:
                msg = b'echo :' + msg
                ws.send(msg)
                print('send ws seccess')
        print('websocket close')

urls.py

from websocketInfo.views import  my_ws
from django.conf.urls import url

urlpatterns = [
    url(r'my_ws/$', my_ws, name='my_ws')
]

websocket_client

from websocket import create_connection
ws = create_connection("ws://127.0.0.1:8080/my_ws/")
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Receiving...")
result = ws.recv()
print(result)
ws.close()
print('ws close')

ΠΊΠΎΠΌΠ°Π½Π΄Π° для запуска сСрвСра Gunicorn

gunicorn MyWebsocket.wsgi -b 0.0.0.0:8000 -w 3 -k gevent

Π²Ρ‹Π²ΠΎΠ΄ ошибок

send ws seccess
get None message
websocket close
[2021-01-13 02:43:56 +0000] [101] [ERROR] Socket error processing request.
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base_async.py", line 65, in handle
    util.reraise(*sys.exc_info())
  File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
    raise value
  File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base_async.py", line 55, in handle
    self.handle_request(listener_name, req, client, addr)
  File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/ggevent.py", line 143, in handle_request
    super().handle_request(listener_name, req, sock, addr)
  File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base_async.py", line 128, in handle_request
    util.reraise(*sys.exc_info())
  File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
    raise value
  File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base_async.py", line 114, in handle_request
    resp.write(item)
  File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 326, in write
    self.send_headers()
  File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 322, in send_headers
    util.write(self.sock, util.to_bytestring(header_str, "latin-1"))
  File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 286, in write
    sock.sendall(data)
  File "/usr/local/lib/python3.7/site-packages/gevent/_socket3.py", line 523, in sendall
    return _socketcommon._sendall(self, data_memory, flags)
  File "/usr/local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 367, in _sendall
    chunk_size = max(socket.getsockopt(SOL_SOCKET, SO_SNDBUF), 1024 * 1024)
  File "/usr/local/lib/python3.7/site-packages/gevent/_socket3.py", line 156, in __getattr__
    return getattr(self._sock, name)
  File "/usr/local/lib/python3.7/site-packages/gevent/_socket3.py", line 66, in _dummy
    raise OSError(EBADF, 'Bad file descriptor')
OSError: [Errno 9] Bad file descriptor

@ChrisXiaoShu ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Π°Ρ Π²Π°ΠΌΠΈ трассировка стСка сообщаСт Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сокСта Π±Ρ‹Π» явно Π·Π°ΠΊΡ€Ρ‹Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Python (это ΠΊΠΎΠ³Π΄Π° gevent ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свой _dummy для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ опСрационная систСма). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ нСкоторая Ρ‡Π°ΡΡ‚ΡŒ вашСго стСка прилоТСния Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ сокСт ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Gunicorn ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ; Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ возникновСния ошибки Gunicorn Π΅Ρ‰Π΅ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ HTTP-ΠΎΡ‚Π²Π΅Ρ‚Π°.

Π’ ΠΌΠΎΠ΅ΠΌ случаС такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с Ρ‚ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ эта ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ дСйствий. Иногда Ρ‡Π΅Ρ€Π΅Π· 5 ΠΌΠΈΠ½ΡƒΡ‚, ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‡Π΅Ρ€Π΅Π· 2 часа ...

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ