ZeroMQとPostgreSQLをasyncioで使用する

おそらく誰もが素晴らしいasyncioライブラリについて聞いたことがあるでしょうか?



そうでない場合、簡単に説明すると、このライブラリはPythonの非同期ネットワークプログラミングの標準になっています。 竜巻ねじれは、彼女と一緒に働くことを学ぶか、徐々に疎外されます。



asyncioは優れていますがTCPUDPUNIXソケット、 PIPES、および非同期で実行されるサブプロセスを 操作するための単なるライブラリです。



誰もが素晴らしいことをするためには、 asyncio連携できるサードパーティのライブラリが必要です 。 既に何かがありますが、十分ではありません。



だから私は同僚とカップルを作りました: ZeroMQ用とPostgreSQL用



Python 2にしっかりと座り、Python 3に興味がない場合は、愚かな質問やその他の誤解を避けるために切り口を避けてください





なぜ必要なのですか?



ZeroMQPostgressが不可欠な新しいプロジェクトを開始しているからです。 asyncioでやりたいのですが。 私は行方不明の部分をカットしなければなりませんでした。



私はすぐに両方ともしっかりしていると言わなければなりません。 私はPython Core Developerであり、 asyncioコードにも多くの仕事があります。 私自身が作成を支援したシステムのために書くことがどれほど良いか理解できたと思います。



さらに、両方のライブラリのコードをテストおよび明確な(希望)ドキュメントで(ほぼ)100%網羅しています。



aiozmq - asyncioでZeroMQソケットを使用できます。



ドキュメントはこちらです。



aiozmqは低レベルのZeroMQソケットで動作し、最も重要なことには、 すぐに リモートプロシージャコールメカニズム(およびPubSubNotify )を提供します。



短い例:



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で問題に書き込み、さらにすぐにプルリクエストを行う



All Articles