Zrób sobie asyncio
*dla ubogich

Cześć
mam na imię michał
programuję w C++
mieszkam w krakowie
Agenda
generatory
Pętla zdarzeń
sockety
context switching
czyli jak jednocześnie żuć gumę i iść po schodach
CONTEXT SWITCHing
yield
CONTEXT SWITCHing
NEXT()
CONTEXT SWITCHing
SEND()
CONTEXT SWITCHing
rysunek!

yield

yield

yield

yield

yield
CONTEXT SWITCHing
yield from

yield from

yield from

yield from

yield from

yield from

yield from

yield from

yield from
yield from

_i = iter(EXPR)
try:
_y = next(_i) # ------------------ "yield from"
except StopIteration as _e:
_r = _e.value
else:
while 1:
try:
_s = yield _y # ---------- "yield"
except GeneratorExit as _e:
try:
_m = _i.close
except AttributeError:
pass
else:
_m()
raise _e
except BaseException as _e:
_x = sys.exc_info()
try:
_m = _i.throw
except AttributeError:
raise _e
else:
try:
_y = _m(*_x)
except StopIteration as _e:
_r = _e.value
break
else:
try:
if _s is None:
_y = next(_i) # --- "next"
else:
_y = _i.send(_s)
except StopIteration as _e:
_r = _e.value
break
RESULT = _r
yield from

_i = iter(EXPR)
try:
_y = next(_i) # ------------------ "yield from"
except StopIteration as _e:
_r = _e.value
else:
while 1:
try:
_s = yield _y # ---------- "yield"
except GeneratorExit as _e:
try:
_m = _i.close
except AttributeError:
pass
else:
_m()
raise _e
except BaseException as _e:
_x = sys.exc_info()
try:
_m = _i.throw
except AttributeError:
raise _e
else:
try:
_y = _m(*_x)
except StopIteration as _e:
_r = _e.value
break
else:
try:
if _s is None:
_y = next(_i) # --- "next"
else:
_y = _i.send(_s)
except StopIteration as _e:
_r = _e.value
break
RESULT = _r
yield from

PEP 380
INPUT/OUTPUT
socket
INPUT/OUTPUT
BIND(), LISTEN(), ACCEPT()
INPUT/OUTPUT
recv()
INPUT/OUTPUT
sendall()
INPUT/OUTPUT
select.poll()

Pętla zdarzeń
BIEDA-ASyNCIO
w 5 minut
Dziękuję
mrzechonek/ghetto-asyncio

Bieda-Asyncio @ PyCon PL 2016
By Michał Lowas-Rzechonek
Bieda-Asyncio @ PyCon PL 2016
Implementacja głównej pętli, na kolanie
- 815