そうでない場合、簡単に説明すると、このライブラリはPythonの非同期ネットワークプログラミングの標準になっています。 竜巻とねじれは、彼女と一緒に働くことを学ぶか、徐々に疎外されます。
asyncioは優れていますが 、 TCP 、 UDP 、 UNIXソケット、 PIPES、および非同期で実行されるサブプロセスを 操作するための単なるライブラリです。
誰もが素晴らしいことをするためには、 asyncioと連携できるサードパーティのライブラリが必要です 。 既に何かがありますが、十分ではありません。
だから私は同僚とカップルを作りました: ZeroMQ用とPostgreSQL用
Python 2にしっかりと座り、Python 3に興味がない場合は、愚かな質問やその他の誤解を避けるために切り口を避けてください 。
なぜ必要なのですか?
ZeroMQとPostgressが不可欠な新しいプロジェクトを開始しているからです。 asyncioでやりたいのですが。 私は行方不明の部分をカットしなければなりませんでした。
私はすぐに両方ともしっかりしていると言わなければなりません。 私はPython Core Developerであり、 asyncioコードにも多くの仕事があります。 私自身が作成を支援したシステムのために書くことがどれほど良いか理解できたと思います。
さらに、両方のライブラリのコードをテストおよび明確な(希望)ドキュメントで(ほぼ)100%網羅しています。
aiozmq - asyncioでZeroMQソケットを使用できます。
ドキュメントはこちらです。
aiozmqは低レベルのZeroMQソケットで動作し、最も重要なことには、 すぐに リモートプロシージャコールメカニズム(およびPubSubとNotify )を提供します。
短い例:
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は非同期モードでpsycopg2で動作し、 接続プールを素敵なボーナスとして提供します
ドキュメントはこちらです。
@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
気に入ったら試してみてください-使ってください。
バグを見つける-githubで問題に書き込み、さらにすぐにプルリクエストを行う