ΠΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π΄Π»Ρ Π―Π½Π΄Π΅ΠΊΡ.ΠΠ»ΠΈΡΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠΌ Π―Π½Π΄Π΅ΠΊΡΠ°
ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π±Π΅Π· callback-ΠΎΠ² ΠΈ ΡΡΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π°. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ ΡΠΈΠΊΠ»Ρ:
from alice_scripts import Skill, request, say, suggest
skill = Skill(__name__)
@skill.script
def run_script():
yield say('ΠΠΎΠ±ΡΡΠΉ Π΄Π΅Π½Ρ! ΠΠ°ΠΊ Π²Π°Ρ Π·ΠΎΠ²ΡΡ?')
name = request.command
yield say('Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΠΌ Π»Π΅Ρ?')
while not request.matches(r'\d+'):
yield say('Π― Π²Π°Ρ Π½Π΅ ΠΏΠΎΠ½ΡΠ»Π°. Π‘ΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠΈΡΠ»ΠΎ')
age = int(request.command)
yield say('ΠΡ Π»ΡΠ±ΠΈΡΠ΅ ΠΊΠΎΡΠ΅ΠΊ ΠΈΠ»ΠΈ ΡΠΎΠ±Π°ΠΊ?',
suggest('ΠΠ±ΠΎΠΆΠ°Ρ ΠΊΠΎΡΠ΅ΡΠ΅ΠΊ', 'ΠΡΠ±Π»Ρ ΡΠΎΠ±Π°ΠΊ'))
while not request.has_lemmas('ΠΊΠΎΡΠΊΠ°', 'ΠΊΠΎΡΠ΅ΡΠΊΠ°',
'ΡΠΎΠ±Π°ΠΊΠ°', 'ΡΠΎΠ±Π°ΡΠΊΠ°'):
yield say('Π£ Π²Π°Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° - ΠΊΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ±Π°ΠΊΠΈ')
loves_cats = request.has_lemmas('ΠΊΠΎΡΠΊΠ°', 'ΠΊΠΎΡΠ΅ΡΠΊΠ°')
yield say(f'Π Π°Π΄Π° ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ, {name}! ΠΠΎΠ³Π΄Π° Π²Π°ΠΌ '
f'ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΡΡ {age + 1}, Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ΄Π°ΡΠΈΡΡ '
f'{"ΠΊΠΎΡΡΠ½ΠΊΠ°" if loves_cats else "ΡΠ΅Π½ΠΊΠ°"}!',
end_session=True)
ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ Flask-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
pip install alice_scripts
FLASK_APP=hello.py flask run --with-threads
- ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
- ΠΠ°Π²ΡΠΊ Β«ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Β»
ΠΠ»Π°ΡΡ Skill
ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ WSGI-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° flask.Flask. Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ° @skill.script
(ΡΠΌ. ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΡΠ΅).
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ session_id
.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ yield say(...)
ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ Π²ΡΠ΄Π°ΡΠΈ ΠΎΡΠ²Π΅ΡΠ° Π½Π° Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ ΡΠΈΠΏΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
-
ΠΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π·Π°Π΄Π°ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΡΠ°Π·Ρ, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²:
yield say('ΠΠ°ΠΊ Π΄Π΅Π»Π°?', 'ΠΠ°ΠΊ Π²Ρ?', 'ΠΠ°ΠΊ ΠΏΠΎΠΆΠΈΠ²Π°Π΅ΡΠ΅?')
-
ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ (ΡΠΌ. Π½ΠΈΠΆΠ΅) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΡΠ²Π΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ
suggest
ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠ°:yield say('ΠΠ°ΠΊ Π΄Π΅Π»Π°?', suggest('Π₯ΠΎΡΠΎΡΠΎ', 'ΠΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ', 'ΠΠ΅ ΠΎΡΠ΅Π½Ρ'))
-
ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²:
yield say('ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅! ΠΡΠΎ ΠΌΡ, Ρ ΠΎΡΠΎΠ²ΠΎΠ΄ΠΎΠ²Π΅Π΄Ρ.', tts='ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅! ΠΡΠΎ ΠΌΡ, Ρ ΠΎΡΠΎΠ²+ΠΎΠ΄ΠΎ Π²+Π΅Π΄Ρ.')
ΠΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΡ Β«ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β» Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ»ΠΎΠ²Π°ΡΡ
response
Π² ΠΎΡΠ²Π΅ΡΠ΅ Π½Π°Π²ΡΠΊΠ°.
ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ response
ΠΈΠ· ΠΎΡΠ²Π΅ΡΠ° Π½Π°Π²ΡΠΊΠ° ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠ΄Π° Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ.
-
suggest(...)
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠ°:
yield say('ΠΠ°ΠΊ Π΄Π΅Π»Π°?', suggest('Π₯ΠΎΡΠΎΡΠΎ', 'ΠΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ'))
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠ°Π΄ΠΈΠΈ proof of concept, Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ
yield say(...)
.
ΠΠ±ΡΠ΅ΠΊΡ request
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ thread-local Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠ΅ΡΡΠΈΠΈ.
-
Π‘ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ
request
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΡΡΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠ° ΠΊ Π½Π°Π²ΡΠΊΡ:original_utterance = request['request']['original_utterance']
-
request.command
β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ command, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ±ΡΠ°Π½Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ ΡΠΎΡΠΊΠΈ. -
request.matches(pattern, flags=0)
β ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎrequest.command
ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡpattern
(ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ re.fullmatch). -
request.words
β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π° (ΠΈ ΡΠΈΡΠ»Π°), Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π² ΠΏΠΎΠ»Π΅ command. -
request.lemmas
β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ ΡΠ»ΠΎΠ² ΠΈΠ· ΡΠ²ΠΎΠΉΡΡΠ²Π°request.words
(ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ pymorphy2). -
request.has_lemmas(...)
β ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π±ΡΠ»ΠΈ Π»ΠΈ Π² Π·Π°ΠΏΡΠΎΡΠ΅ ΡΠ»ΠΎΠ²Π°, ΡΡΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΌΠ°ΠΌΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠ»ΠΎΠ²:if request.has_lemmas('Π½Π΅Ρ', 'Π½Π΅'): answer = 'no' elif request.has_lemmas('Π΄Π°', 'Π°Π³Π°'): answer = 'yes'
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ (ΠΈ Π½ΡΠΆΠ½ΠΎ) ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ Π½Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° yield from
ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° return
. Π‘ΠΌ. ΠΏΡΠΈΠΌΠ΅Ρ.
Π ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π° Ρ ΡΠ°Π½ΠΈΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Python-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ:
- Π Π΅ΠΏΠ»ΠΈΠΊΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΡΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ.
- ΠΠ°Π²ΡΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ Π½Π° serverless-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅.
- ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π·ΠΎΡΠ²Π°Π½Ρ.
Π Π°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² production-Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ gunicorn. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΡΠΊΠ΅ΡΠΎΠ² (ΠΈΠ½Π°ΡΠ΅ gunicorn Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΡΠΈΠΈ ΡΠ°Π·Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ).
ΠΡΠ»ΠΈ Ρ Π²Π°ΡΠ΅Π³ΠΎ Π½Π°Π²ΡΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΏΠ΅Π²Π°ΡΡ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π·Π°ΠΏΡΠΎΡΡ Π·Π° ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ (ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ β Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1,5 ΡΠ΅ΠΊ), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΡΡ ΡΠ°ΠΊ:
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² gunicorn (Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ β 1 Π²ΠΎΡΠΊΠ΅Ρ) Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ .
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ nginx ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ» Π·Π°ΠΏΡΠΎΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅
session_id
ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ gunicorn.
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΅ΡΡΡ Π² ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅.
Copyright Β© ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ ΠΠΎΡΠ·ΡΠ½ΠΎΠ², 2018
The MIT License (MIT)