web-dev-qa-db-ja.com

SQLAlchemyを非ブロッキングになるように構成できますか?

SQLAlchemyを介したデータベース呼び出しはブロックされ、同期コード以外での使用には適していないという印象を受けています。私は正しいですか(そうでないことを願っています!)、または非ブロッキングになるように構成する方法はありますか?

29
Matty

gevent を使用して、非ブロッキングスタイルでSQLAを使用できます。 psycopg2を使用した例を次に示します。psycopg2を使用します コルーチンサポート

https://bitbucket.org/zzzeek/green_sqla/

pymysql でも同じアイデアを使用していると聞きました。 pymysqlは純粋なPythonであり、ソケットライブラリを使用するため、geventはソケットライブラリに非同期のパッチを適用します。

29
zzzeek

Tornado を見てください。いくつかのきちんとした非ブロッキングライブラリ、特にtornado.genがあります。

これを Momoko 、Tornadoのノンブロッキングpsycopgラッパーlibと一緒に使用します。これまでのところ素晴らしかったです。おそらく唯一の欠点は、SQLAlchemyが提供するすべてのモデルオブジェクトを失うことです。ただし、パフォーマンスは非現実的です。

6
kuhnza

グリーンレットの助けがなければ、asyncioの文脈では、答えはノーです。

ただし、asyncioではSQLAlchemyの一部しか使用できません。 GINOプロジェクト の例を見つけてください。ここでは、エンジンと完全な実行コンテキストのないSQLAlchemyコアのみを使用して、非同期で単純なORMを作成しました。

1
Fantix King