おそらく誰もが素晴らしい
asyncioライブラリについて聞いたことがあるでしょうか?
そうでない場合、簡単に説明すると、このライブラリは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で
問題に書き込み、さらにすぐに
プルリクエストを行う