Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/borzunov/alice_scripts
π© π Easy way to make skills for the Alice voice assistant
https://github.com/borzunov/alice_scripts
alice-sdk python yandex-alice yandex-dialogs
Last synced: 12 days ago
JSON representation
π© π Easy way to make skills for the Alice voice assistant
- Host: GitHub
- URL: https://github.com/borzunov/alice_scripts
- Owner: borzunov
- License: mit
- Created: 2018-07-30T18:59:03.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-04-16T23:51:03.000Z (9 months ago)
- Last Synced: 2024-12-25T08:21:37.959Z (16 days ago)
- Topics: alice-sdk, python, yandex-alice, yandex-dialogs
- Language: Python
- Homepage:
- Size: 22.5 KB
- Stars: 39
- Watchers: 4
- Forks: 7
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-alice - borzunov/alice_scripts
README
alice_scripts
=============ΠΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π΄Π»Ρ [Π―Π½Π΄Π΅ΠΊΡ.ΠΠ»ΠΈΡΡ](https://dialogs.yandex.ru/)
> ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠΌ Π―Π½Π΄Π΅ΠΊΡΠ°
## π ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π±Π΅Π· callback-ΠΎΠ² ΠΈ ΡΡΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π°. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ ΡΠΈΠΊΠ»Ρ:
```python
from alice_scripts import Skill, request, say, suggest
skill = Skill(__name__)@skill.script
def run_script():
yield say('ΠΠΎΠ±ΡΡΠΉ Π΄Π΅Π½Ρ! ΠΠ°ΠΊ Π²Π°Ρ Π·ΠΎΠ²ΡΡ?')
name = request.commandyield 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](http://flask.pocoo.org/)-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
pip install alice_scripts
FLASK_APP=hello.py flask run --with-threads
## ΠΡΠΈΠΌΠ΅ΡΡ* [ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ](examples)
* [ΠΠ°Π²ΡΠΊ Β«ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Β»](https://github.com/FuryThrue/WhoIsAlice/blob/master/app.py)## π ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
### Skill
ΠΠ»Π°ΡΡ `Skill` ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ WSGI-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° [flask.Flask](http://flask.pocoo.org/docs/1.0/api/#flask.Flask). Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ° `@skill.script` (ΡΠΌ. ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΡΠ΅).
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ `session_id`.
### yield say(...)
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ `yield say(...)` ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ Π²ΡΠ΄Π°ΡΠΈ ΠΎΡΠ²Π΅ΡΠ° Π½Π° Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ ΡΠΈΠΏΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
- ΠΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π·Π°Π΄Π°ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΡΠ°Π·Ρ, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²:
```python
yield say('ΠΠ°ΠΊ Π΄Π΅Π»Π°?', 'ΠΠ°ΠΊ Π²Ρ?', 'ΠΠ°ΠΊ ΠΏΠΎΠΆΠΈΠ²Π°Π΅ΡΠ΅?')
```- ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ (ΡΠΌ. Π½ΠΈΠΆΠ΅) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΡΠ²Π΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ `suggest` ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠ°:
```python
yield say('ΠΠ°ΠΊ Π΄Π΅Π»Π°?', suggest('Π₯ΠΎΡΠΎΡΠΎ', 'ΠΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ', 'ΠΠ΅ ΠΎΡΠ΅Π½Ρ'))
```- ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ [ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#response), Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²:
```python
yield say('ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅! ΠΡΠΎ ΠΌΡ, Ρ ΠΎΡΠΎΠ²ΠΎΠ΄ΠΎΠ²Π΅Π΄Ρ.',
tts='ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅! ΠΡΠΎ ΠΌΡ, Ρ ΠΎΡΠΎΠ²+ΠΎΠ΄ΠΎ Π²+Π΅Π΄Ρ.')
```
ΠΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΡ Β«ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β» Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ»ΠΎΠ²Π°ΡΡ `response` Π² ΠΎΡΠ²Π΅ΡΠ΅ Π½Π°Π²ΡΠΊΠ°.### ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ
ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠ΅ [Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ](https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)). ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ `response` ΠΈΠ· [ΠΎΡΠ²Π΅ΡΠ°](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#response) Π½Π°Π²ΡΠΊΠ° ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠ΄Π° Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ.
- `suggest(...)`
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠ°:
```python
yield say('ΠΠ°ΠΊ Π΄Π΅Π»Π°?', suggest('Π₯ΠΎΡΠΎΡΠΎ', 'ΠΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ'))
```
> Π’Π°ΠΊ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠ°Π΄ΠΈΠΈ proof of concept, Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ `yield say(...)`.### request
ΠΠ±ΡΠ΅ΠΊΡ `request` ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ thread-local Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠ΅ΡΡΠΈΠΈ.
- Π‘ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ `request` ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΡΡΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΈΠ· [Π·Π°ΠΏΡΠΎΡΠ°](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#request) ΠΊ Π½Π°Π²ΡΠΊΡ:
```python
original_utterance = request['request']['original_utterance']
```- `request.command` β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ [command](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#request), ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ±ΡΠ°Π½Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ ΡΠΎΡΠΊΠΈ.
- `request.matches(pattern, flags=0)` β ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ `request.command` ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ `pattern` (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ [re.fullmatch](https://docs.python.org/3/library/re.html#re.fullmatch)).
- `request.words` β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π° (ΠΈ ΡΠΈΡΠ»Π°), Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π² ΠΏΠΎΠ»Π΅ [command](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#request).
- `request.lemmas` β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ ΡΠ»ΠΎΠ² ΠΈΠ· ΡΠ²ΠΎΠΉΡΡΠ²Π° `request.words` (ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ [pymorphy2](http://pymorphy2.readthedocs.io/en/latest/)).
- `request.has_lemmas(...)` β ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π±ΡΠ»ΠΈ Π»ΠΈ Π² Π·Π°ΠΏΡΠΎΡΠ΅ ΡΠ»ΠΎΠ²Π°, ΡΡΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΌΠ°ΠΌΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠ»ΠΎΠ²:
```python
if request.has_lemmas('Π½Π΅Ρ', 'Π½Π΅'):
answer = 'no'
elif request.has_lemmas('Π΄Π°', 'Π°Π³Π°'):
answer = 'yes'
```## Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ (ΠΈ Π½ΡΠΆΠ½ΠΎ) ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ Π½Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° *Π΄ΠΎΠ»ΠΆΠ½Π°* Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° `yield from` ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° `return`. Π‘ΠΌ. [ΠΏΡΠΈΠΌΠ΅Ρ](examples/guess_number_subgens.py).
## Π Π°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π° Ρ ΡΠ°Π½ΠΈΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Python-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ:
- Π Π΅ΠΏΠ»ΠΈΠΊΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΡΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ.
- ΠΠ°Π²ΡΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ Π½Π° serverless-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅.
- ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π·ΠΎΡΠ²Π°Π½Ρ.Π Π°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² production-Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ gunicorn. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ [ΠΏΠΎΡΠΎΠΊΠΎΠ²](http://docs.gunicorn.org/en/stable/settings.html#threads), Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ [Π²ΠΎΡΠΊΠ΅ΡΠΎΠ²](http://docs.gunicorn.org/en/stable/settings.html#workers) (ΠΈΠ½Π°ΡΠ΅ gunicorn Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΡΠΈΠΈ ΡΠ°Π·Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ).
## ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠ»ΠΈ Ρ Π²Π°ΡΠ΅Π³ΠΎ Π½Π°Π²ΡΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΏΠ΅Π²Π°ΡΡ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π·Π°ΠΏΡΠΎΡΡ Π·Π° ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ (ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ β Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1,5 ΡΠ΅ΠΊ), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΡΡ ΡΠ°ΠΊ:
1. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² gunicorn (Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ β 1 Π²ΠΎΡΠΊΠ΅Ρ) Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ .
2. ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ nginx ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ» Π·Π°ΠΏΡΠΎΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ `session_id` ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ gunicorn.ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΅ΡΡΡ Π² [ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅](examples/scaling).
## ΠΠ²ΡΠΎΡ
Copyright Β© ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ ΠΠΎΡΠ·ΡΠ½ΠΎΠ², 2018
The MIT License (MIT)