
Dmitriy
27.06.2017
11:34:21
ЕМНИП

Koko
27.06.2017
11:35:15
Аа, я в шары долблюсь, стыд:
As of Python >= 2.7 and >= 3.2, the argparse module is maintained within the Python standard library.
argparse should work on Python >= 2.3, it was tested on:
2.3, 2.4, 2.5, 2.6 and 2.7
чот думал что >=2.7 / >=3.2 это вообще _всё_ что поддерживается)

Маришка
27.06.2017
11:35:57

Google

Anton
27.06.2017
11:37:48

Dmitriy
27.06.2017
11:38:23
ЕМНИП
Ах да, можно и без корутин, с коллбэком

Anna
27.06.2017
11:44:17
а чем асинхронные колбэки отличаются от генераторов?

Nikolay
27.06.2017
11:45:15
коллбэки - это функции, которые дергаются по какому-то событию

Anna
27.06.2017
11:45:36
@gen.coroutine генератор

Nikolay
27.06.2017
11:45:36
например, событию на сокете
а генератор - это концепция явного возвращения результата с сохранением состояния
в питоне корутины реализованы на генераторах, да, но, тем не менее, это всего лишь одна из возможных реализаций

Anna
27.06.2017
11:47:55
коллбеки в запросах не лочат бд?

Anton
27.06.2017
11:48:24

Anna
27.06.2017
11:49:02
а чем плох залоченный поток?

Anton
27.06.2017
11:49:20

Google

Dmitriy
27.06.2017
11:49:33
Реквесты остальные могут ждать

Nikolay
27.06.2017
11:49:34
Анна, падажжи
у тебя каша в голове

Anton
27.06.2017
11:49:45
БД будет лочится, если данные одинаковые меняются

Anna
27.06.2017
11:49:52
пытаюсь разобраться

Nikolay
27.06.2017
11:50:11
1) есть потоки, есть асинхронность - это вещи не связанные между собой

Anna
27.06.2017
11:50:20

Nikolay
27.06.2017
11:50:57
2) асинхронность в случае питона чаще всего работает в одном потоке, то есть строится в виде дерева функций, представляющих собой коллбэки на event loop’е

Anton
27.06.2017
11:51:15
как этого избежать?
использовать асинхронность (предпочтительно) / многопоточность (нежелательно)

Проксимов
27.06.2017
11:51:36

Nikolay
27.06.2017
11:51:40
3) в результате этого, если хоть какая-то из этих функций долго работает и не возвращает управление - все виснет, потому что поток один и параллельности никакой нет

Anton
27.06.2017
11:51:52

Nikolay
27.06.2017
11:52:02

Anton
27.06.2017
11:52:07
для сетевых запросов - не нужна

Anna
27.06.2017
11:52:38
для сетевых запросов tornado.gen.coroutine + yield?

Nikolay
27.06.2017
11:52:42
так вот, чтобы не лочить базу - надо с ней асинхронно общаться, но мало какие базы это поддерживают из коробки

Anton
27.06.2017
11:53:04

Nikolay
27.06.2017
11:53:06
в современном питоне

Anna
27.06.2017
11:53:19
торнадо и 3 питон

Google

Dmitriy
27.06.2017
11:53:37
Говорю же не модно

Ignalion
27.06.2017
11:53:39

Anton
27.06.2017
11:53:47
тогда async/await

Nikolay
27.06.2017
11:53:59

Anna
27.06.2017
11:54:06
мнения разошлись

Dmitriy
27.06.2017
11:54:17
И то и другое можно

Nikolay
27.06.2017
11:54:25

Anton
27.06.2017
11:54:37
http://www.tornadoweb.org/en/stable/guide/coroutines.html#python-3-5-async-and-await

Nikolay
27.06.2017
11:54:39
просто async/await более свежий и приятный

Anna
27.06.2017
11:55:32
оу, спасибо

Ignalion
27.06.2017
11:55:38
Не так. С async/await можно использовать асинхронные генераторы

Anna
27.06.2017
11:56:27

Ignalion
27.06.2017
11:58:26
что это дает?
В ранних реализациях вся асинхронность делалась единственным возможным разрывом потока выполнения в функции — то есть yield'ом.
Это значит, что ты его не можешь использовать по назначению.
(Ну и то что StopIteration приводит к аду и Израилю дебага)
А с приходом async/await, у тебя для корутин используется специальный кейворд, но при этом ты все ещё можешь yield'ить значения из генератора наружу

Проксимов
27.06.2017
11:58:33
Fuck my brain

Anna
27.06.2017
11:58:58
ёмана ..

Ignalion
27.06.2017
11:59:36
ёмана ..
Ну да, скорей всего, это не нужно:)
Но это можно

Егор Партыка
27.06.2017
11:59:41
привет всем

Nikolay
27.06.2017
11:59:43
не смешивай генераторы и корутины

Ignalion
27.06.2017
12:00:04

Google

Anna
27.06.2017
12:00:07
Python 3.5: async and await же

Nikolay
27.06.2017
12:00:17

Anna
27.06.2017
12:00:18
Python 3.5 introduces the async and await keywords (functions using these keywords are also called “native coroutines”)

Nikolay
27.06.2017
12:00:31
и в асинхронные генераторы 3.5 не умел

Ignalion
27.06.2017
12:00:53

Nikolay
27.06.2017
12:02:00
не, там просто небольшая путаница в определениях
асинхронный генератор - это когда ты можешь сделать yield из async-функции, то есть корутины
в обычном async-await подходе ты этого сделать не можешь, у тебя return

Ignalion
27.06.2017
12:04:01

Admin
ERROR: S client not available

Nikolay
27.06.2017
12:04:12
до этого была боль

Anton
27.06.2017
12:04:44
да, асинхронные генераторы полезная весч

Anna
27.06.2017
12:05:28
кто-нить может показать на примере?

Anton
27.06.2017
12:06:07
async def foo():
async for item in db.query(...):
yield item

Nikolay
27.06.2017
12:06:44
хотя...

Anton
27.06.2017
12:07:25
удобно обрабатывать элементы массива из бд, не собирая их в список

Anna
27.06.2017
12:08:02
как выглядит асинхронный GET-запрос?

Nikolay
27.06.2017
12:08:27
resp = await session.get(‘http://ololo.bugaga/‘)

Google

Anton
27.06.2017
12:08:37
ээ, http://www.tornadoweb.org/en/stable/guide/coroutines.html#python-3-5-async-and-await же
или ты по ссылкам не ходишь?

Nikolay
27.06.2017
12:09:03
да пофиг, та же идея

Anna
27.06.2017
12:09:10
хожу))

Anton
27.06.2017
12:09:10

Nikolay
27.06.2017
12:09:11
ну будет http_client.fetch
а, окей)

Anton
27.06.2017
12:10:10

Anna
27.06.2017
12:12:44
aiohttp?

Nikolay
27.06.2017
12:12:51
(я не знаю, что еще ответить на такое)

Anna
27.06.2017
12:13:29
чем aiohttp от async-and-await отличается?

Nikolay
27.06.2017
12:13:51

Vespertilio
27.06.2017
12:14:07
может asyncio?

Nikolay
27.06.2017
12:14:07
это модуль потипу торнады, только новый

Anton
27.06.2017
12:14:36
а что, гугл тоже попал в списком роскомнадзора?

Маришка
27.06.2017
12:14:44

Anton
27.06.2017
12:14:54
сегодня похоже опять

Маришка
27.06.2017
12:14:59
Лолшто?