Gunicorn: ASGI рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдирд╡ре░ 2016  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

Django Daphne ASGI рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ, рд▓реЗрдХрд┐рди Daphne рд╕рд░реНрд╡рд░ рдмреЗрд╣рдж рдирдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рддрдХ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ SSL рд╕рдорд░реНрдерди, рдкрд░рд┐рдкрдХреНрд╡рддрд╛ рджрд░реНрдж рдирд╣реАрдВ)ред

рдХреНрдпрд╛ рдирд┐рд░реНрдмрд╛рдз WSGI/ASGI рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП GUnicorn рдореЗрдВ ASGI рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдЕрднреА рдХрд╡рд░ рдХрд░реЗрдВред (рддреГрддреАрдп-рдкрдХреНрд╖ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВред)

рдпреВрд╡рд┐рдХреЙрд░реНрди 0.2 рдЕрдм рдЗрд╕реЗ рд╕реАрдзреЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдирд┐рдХреЛрд░реНрди рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдПрд╕рдЬреАрдЖрдИ рдРрдк рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЧрдирд┐рдХреЛрд░реНрди рд╡рд░реНрдХрд░ рдХреНрд▓рд╛рд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рд╕реАрдзреЗ рдпреВрд╡рд┐рдХреЙрд░реНрди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрдВрджреВрдХрдзрд╛рд░реА рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рддреЗ рд╣реИрдВред

http://www.uvicorn.org/#running -with-gunicorn

uvloop рдФрд░ httptools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, gunicorn рд╕реЗ ASGI рдРрдк рдЪрд▓рд╛рдПрдБ:

gunicorn app:App -w 4 -k uvicorn.workers.UvicornWorker

asyncio рдФрд░ h11 (pypy рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, gunicorn рд╕реЗ ASGI рдРрдк рдЪрд▓рд╛рдПрдБ:

gunicorn app:App -w 4 -k uvicorn.workers.UvicornH11Worker

рдпрджрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдХреЛрд░ рдЧрдирд┐рдХреЛрд░реНрди рдкреИрдХреЗрдЬ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рд╣реИ рддреЛ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЦреБрд▓рд╛ рд╣реИред

рд╕рднреА 22 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@arcivanov рдореИрдВ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░

рдЗрд╕ рдЯрд┐рдХрдЯ рдХреЛ ASAP рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗред

рдХреЛрдИ рдЕрдкрдбреЗрдЯреНрд╕?

@benoitc @berkerpeksag рдФрд░ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдИ-рдореЗрд▓ рдкрд░ рдмрд╛рддрдЪреАрдд рдХреАред рдЕрднреА рддрдХ рдХреЛрдИ рдХрд╛рдо рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ ASGI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ред рдпрджрд┐ рдХреЛрдИ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрддреНрд╕рд╛рд╣рдкреВрд░реНрд╡рдХ рдорджрдж, рдЪрд░реНрдЪрд╛ рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ рд╡реИрд╕реЗ рднреА рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдЬреАрдЖрдИ рд╕реНрдкреЗрдХ рдХреЛ рдУрд╡рд░рд╣рд╛рд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддрддрд╛ рд╣реВрдВ (рдирдИ рдХрд▓реНрдкрдирд╛ рдпрд╣рд╛рдВ рддреИрдпрд╛рд░ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдХреБрд▓ рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИ: http: / /channels.readthedocs.io/en/2.0/asgi.html - рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ WSGI рдХреА рддрд░рд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ)

@andrewgodwin рдХреВрд▓ asgi . рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

@andrewgodwin ASGI рдХрд╛ рджрд░реНрдЬрд╛ рдХреНрдпрд╛ рд╣реИ?

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдПрдПрд╕рдЬреАрдЖрдИ рдРрдк рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ рдпрд╣реА рдорд┐рд▓рд╛:

import json

def app(scope):
    async def channel(receive, send):
        message = await receive()

        if scope['method'] == 'POST':
            response = message
        else:
            response = scope

        await send({
            'type': 'http.response.start',
            'status': 200,
            'headers': [
                [b'Content-Type', b'application/json'],
            ],
        })
        await send({
            'type': 'http.response.body',
            'body': json.dumps(response, default=bytes.decode).encode(),
        })
        await send({
            'type': 'http.disconnect',
        })
    return channel
> daphne app:app
2018-03-31 22:28:10,823 INFO     Starting server at tcp:port=8000:interface=127.0.0.1
2018-03-31 22:28:10,824 INFO     HTTP/2 support enabled
2018-03-31 22:28:10,824 INFO     Configuring endpoint tcp:port=8000:interface=127.0.0.1
2018-03-31 22:28:10,825 INFO     Listening on TCP address 127.0.0.1:8000
127.0.0.1:43436 - - [31/Mar/2018:22:28:17] "GET /" 200 347
127.0.0.1:43440 - - [31/Mar/2018:22:28:22] "POST /" 200 43
127.0.0.1:43446 - - [31/Mar/2018:22:28:42] "POST /" 200 54
> http -b get :8000/
{
    "type": "http"
    "http_version": "1.1",
    "method": "GET",
    "path": "/",
    "query_string": "",
    "root_path": "",
    "scheme": "http",
    "headers": [
        ["host", "localhost:8000"],
        ["user-agent", "HTTPie/0.9.9"],
        ["accept-encoding", "gzip, deflate"],
        ["accept", "*/*"],
        ["connection", "keep-alive"]
    ],
    "client": ["127.0.0.1", 43360],
    "server": ["127.0.0.1", 8000],
}

> http -b -f post :8000/ foo=bar
{
    "body": "foo=bar",
    "type": "http.request"
}

> http -b -j post :8000/ foo=bar
{
    "body": "{\"foo\": \"bar\"}",
    "type": "http.request"
}

https://github.com/django/asgiref/blob/master/specs/www.rst

@sirex ASGI рдЕрдм рд╕реНрдерд┐рд░ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдбреИрдлрдиреЗ рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

django рдкрд░ рд▓рд┐рдВрдХ ASGI "рдХрд▓реНрдкрдирд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЦрд┐рд░реА рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬреЛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ?

@andrewgodwin рдореИрдВ рдПрдПрд╕рдЬреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдПрд╕рдЬреАрдЖрдИ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ/рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@benoitc рджреЛ ASGI рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкреГрд╖реНрда рд╣реИрдВ:

https://github.com/django/asgiref/blob/master/specs/asgi.rst - рд╕рд╛рдорд╛рдиреНрдп ASGI рд╡рд┐рдирд┐рд░реНрджреЗрд╢ред

https://github.com/django/asgiref/blob/master/specs/www.rst - HTTP рдФрд░ WebSockets рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ WSGI рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ред

@рд╕рд╛рдЗрд░реЗрдХреНрд╕ рдзрдиреНрдпрд╡рд╛рджред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИрдВ рдЬрдм рдпрд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рд╡реИрд╕реЗ рднреА рдореБрдЭреЗ https://channels.readthedocs.io/en/latest/ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдареАрдХ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдкреЗрдк рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЕрдЬрдЧрд░ 2 рд╕рдорд░реНрдерди рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рдПрдПрд╕рдЬреАрдЖрдИ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдиреЗ рдЖрдЦрд┐рд░реА рдЯрд┐рдкреНрдкрдгреА рд╣рдЯрд╛ рджреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдПрдПрд╕рдЬреАрдЖрдИ рдХреЛ рдкреАрдИрдкреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд░реНрдерди рдорд┐рд▓реЗ (рдФрд░ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рд▓рдЧрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд░рд╛рджрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЬреИрд╕рд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЕрдЬрдЧрд░ 2 рд╕рдорд░реНрдерди рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдПрдПрд╕рдЬреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдпреВрд╡рд┐рдХреЙрд░реНрди рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд▓рд╛рдпрдХ

(рдпреВрд╡рд┐рдХреЙрд░реНрди рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЧрдирд┐рдХреЛрд░реНрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдЖрджрд┐ рдХреЗ рдмрд┐рдирд╛, рдмрд╕ рдПрдХ рдЕрдзрд┐рдХ рдиреНрдпреВрдирддрдо рд╡рд┐рдХрд▓реНрдк рдмрди рдЬрд╛рдПред)

рдПрдПрд╕рдЬреАрдЖрдИ рд╕реНрдкреЗрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЕрдм рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ: https://asgi.readthedocs.io/en/latest/ред

рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдЕрднреА рдХрд╡рд░ рдХрд░реЗрдВред (рддреГрддреАрдп-рдкрдХреНрд╖ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВред)

рдпреВрд╡рд┐рдХреЙрд░реНрди 0.2 рдЕрдм рдЗрд╕реЗ рд╕реАрдзреЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдирд┐рдХреЛрд░реНрди рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдПрд╕рдЬреАрдЖрдИ рдРрдк рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЧрдирд┐рдХреЛрд░реНрди рд╡рд░реНрдХрд░ рдХреНрд▓рд╛рд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рд╕реАрдзреЗ рдпреВрд╡рд┐рдХреЙрд░реНрди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрдВрджреВрдХрдзрд╛рд░реА рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рддреЗ рд╣реИрдВред

http://www.uvicorn.org/#running -with-gunicorn

uvloop рдФрд░ httptools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, gunicorn рд╕реЗ ASGI рдРрдк рдЪрд▓рд╛рдПрдБ:

gunicorn app:App -w 4 -k uvicorn.workers.UvicornWorker

asyncio рдФрд░ h11 (pypy рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, gunicorn рд╕реЗ ASGI рдРрдк рдЪрд▓рд╛рдПрдБ:

gunicorn app:App -w 4 -k uvicorn.workers.UvicornH11Worker

рдпрджрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдХреЛрд░ рдЧрдирд┐рдХреЛрд░реНрди рдкреИрдХреЗрдЬ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рд╣реИ рддреЛ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЦреБрд▓рд╛ рд╣реИред

рдЕрдм рдЬрдм gunicorn python 2 рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ ASGI рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ

@tomchristie рдореБрдЭреЗ

рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рд╢рд╛рдпрдж рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдпрд╛ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдЧрдирд┐рдХреЛрд░реНрди рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдЬреЛ h11 рдФрд░/рдпрд╛ httptools рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП uvicorn рдкрд░ рдирд┐рд░реНрднрд░ рдерд╛ред рдпрд╛ рдлрд┐рд░ рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░реЗрдВред

h11 рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд ASGI HTTP рд╕рдорд░реНрдерди Gunicorn рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдПрдХ рд╕реАрдорд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫреА рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?

рд╢рд╛рдпрдж рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдпрд╛ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓рдирд╛?

uvicorn рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рд╣рдордиреЗ click рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдФрд░ рд╕рд┐рд░реНрдл argparse рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ рд╣рдорд╛рд░реА setup.py рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рддреЛ рдЗрд╕рдореЗрдВ рд╢реВрдиреНрдп рд╣рд╛рд░реНрдб рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди HTTP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, WS рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдИрд╡реЗрдВрдЯ рд▓реВрдкред

рдореБрдЭреЗ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА ASGI рд╕рдорд░реНрдерди рдЪрд╛рд╣рд┐рдП, рдЪрд╛рд╣реЗ рдЗрд╕рдХрд╛ рдорддрд▓рдм Gunicorn рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛ, рдПрдХ рд╕реНрдЯрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рдпрд╛ рдХреБрдЫ рдФрд░ред

рдЬреА рдмреЛрд▓рд┐рдпреЗред gunicorn рд╕реЗ daphne рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ .. рдЕрдЧрд░ gunicorn рдмрд╕ asgi рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдЬреЛ рдореБрдЭреЗ рдЗрддрдирд╛ рд╕рдордп рдмрдЪрд╛рдПрдЧрд╛ред

@japrogramer http://www.uvicorn.org/#running -with -gunicorn

Django 3.0 (рджрд┐рд╕рдВрдмрд░ 2019 рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ) рдореЗрдВ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ ASGI рд╕рдорд░реНрдерди рд╣реЛрдЧрд╛ , рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реАрдзреЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП gunicorn рдХрд╛ рдПрдХ рдФрд░ рдмрдбрд╝рд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рд╕рдВрднрд╡рдд: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реБрдЪрд┐ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рд╡реГрджреНрдзрд┐ рджреЗрдЦреЗрдВрдЧреЗред

@johnthagen рдЬреЛ рдкрд╛рдЗрдк рдкрд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рдЯрд┐рдХрдЯреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛рдл рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдорд╣реАрдиреЗ рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

zenglingyu picture zenglingyu  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mw44118 picture mw44118  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mw44118 picture mw44118  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alep picture alep  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vaibhavpatil123 picture vaibhavpatil123  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ