Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

Awesome Lists containing this project

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.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](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)