рд╢рд╛рдпрдж рд╣рд░ рдХреЛрдИ рдЕрджреНрднреБрдд
asyncio рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ?
рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╛рдпрдерди рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдмрди рдЧрдпрд╛ рд╣реИред
рдмрд╡рдВрдбрд░ рдФрд░
рдореБрдбрд╝ рдпрд╛ рддреЛ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗ рдпрд╛ рдзреАрд░реЗ-рдзреАрд░реЗ рд╣рд╛рд╢рд┐рдП рдкрд░ рдЪрд▓реЗ рдЬрд╛рдПрдВрдЧреЗред
рдПрд╕рд┐рдВрдХреЛрдпреЛ рдорд╣рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣
рдЯреАрд╕реАрдкреА ,
рдпреВрдбреАрдкреА ,
рдпреВрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯреНрд╕,
рдкреАрдЖрдИрдкреАрдИрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ
, рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ
рдЙрдкрдкреНрд░рдХрд╛рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рд╕рднреА рдХреЛ рдорд╣рд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ
рдПрд╕рд┐рдВрдХреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЬреЛрдбрд╝реА рдмрдирд╛рдИ: рдПрдХ
рдЬреАрд░реЛрдПрдордХреНрдпреВ рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░рд╛
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдПрдпрджрд┐ рдЖрдк рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдЬрдЧрд░ 2 рдкрд░ рдмреИрдарддреЗ рд╣реИрдВ рдФрд░ рдЕрдЬрдЧрд░ 3 рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ - рдмреЗрд╡рдХреВрдл рд╕рд╡рд╛рд▓реЛрдВ рдФрд░ рдЕрдиреНрдп рдЧрд▓рддрдлрд╣рдореА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдордд рдЬрд╛рдУ ред
рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдереА?
рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ
ZeroMQ рдФрд░
Postgress рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИред рдореИрдВ
asyncio рдкрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рд╛рдкрддрд╛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдХрд╛рдЯрдирд╛ рдкрдбрд╝рд╛ред
рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рджреЛрдиреЛрдВ рдареЛрд╕ рд╣реИрдВред рдореИрдВ
рдкрд╛рдпрдерди рдХреЛрд░ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ рдФрд░
asyncio рдХреЛрдб рдореЗрдВ рднреА рдореЗрд░рд╛ рдмрд╣реБрдд рдХрд╛рдо рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдирд╛ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЦреБрдж рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреАред
рдкреНрд▓рд╕ (рд▓рдЧрднрдЧ) рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕реНрдкрд╖реНрдЯ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ) рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХреЛрдб рдХрд╛ 100% рдХрд╡рд░реЗрдЬред
aiozmq - рдЖрдк
asyncio рдХреЗ рд╕рд╛рде
ZeroMQ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рд▓реЗрдЦрди
рдпрд╣рд╛рдБ рд╣реИ ред
aiozmq рдирд┐рдореНрди-рд╕реНрддрд░реАрдп
ZeroMQ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░
рд░рд┐рдореЛрдЯ рдкреНрд░реЛрд╕реАрдЬрд░ рдХреЙрд▓ рддрдВрддреНрд░ (рдкреНрд▓рд╕
рдкрдмрд╕рдм рдФрд░
рдиреЛрдЯрд┐рдлрд╛рдИ) рджреЗрддрд╛ рд╣реИред
рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг:
import asyncio import aiozmq import aiozmq.rpc class ServerHandler(aiozmq.rpc.AttrHandler): @aiozmq.rpc.method def remote_func(self, a:int, b:int) -> int: return a + b @asyncio.coroutine def go(): server = yield from aiozmq.rpc.start_server( ServerHandler(), bind='tcp://127.0.0.1:5555') client = yield from aiozmq.rpc.open_client( connect='tcp://127.0.0.1:5555') ret = yield from client.rpc.remote_func(1, 2) assert 3 == ret server.close() client.close() asyncio.set_event_loop_policy(aiozmq.ZmqEventLoopPolicy()) asyncio.get_event_loop().run_until_complete(go())
рдЕрдм рдЪрд▓реЛ
aiopg рдкрд░
рдЪрд▓рддреЗ рд╣реИрдВрдпрд╣ lib
psynopg2 рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ
рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рджреЗрддрд╛ рд╣реИ
рдкреНрд░рд▓реЗрдЦрди
рдпрд╣рд╛рдБ рд╣реИ ред
@asyncio.coroutine def test_select(): pool = yield from aiopg.create_pool(dsn) with (yield from pool.cursor()) as cur: yield from cur.execute('SELECT 1') ret = yield from cur.fetchone() assert ret == (1,), ret
рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
aiozmq рдФрд░
aiopgрдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рддреЛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдмрдЧ рдвреВрдВрдвреЗрдВ -
рдореБрджреНрджреЛрдВ рдореЗрдВ рдЧреАрдереВрдм рдкрд░ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рддреБрд░рдВрдд
рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ