2009-11-10 13 views
5

私たちのプロジェクトでは、同期アプリケーション(短命)と非同期のTwistedアプリケーション(長寿命)があります。私たちはデータベースを再構築しており、そのモジュールのすべてのSQLをデカップリングするAPIモジュールを構築しようとしています。このAPIを作成して、同期アプリケーションと非同期アプリケーションの両方で使用できるようにしたいと考えています。同期アプリケーションの場合は、MySQLdbを使用するのと同じように、データベースAPIへの呼び出しがちょうどデータを返すようにしたいのですが、非同期アプリケーションの場合は、同じAPI関数/メソッドを非ブロックにすることを望みます延期された誰でも私にこれを提供するためのヒント、提案、または助けがありますか? ありがとうございます。 DougPython Twistedとデータベース接続

答えて

3

twisted.enterprise.adbapiあなたの要件に合致しないと思われますか?その場合、理由を説明してください。

1

Twistedの中では、基本的には、Deferred(Twisted DBレイヤーなど)を返し、その結果を待ってそれらを返す関数のラッパーが必要です。しかし、それはあなたの反応炉サイクルを使い果たしているので、ビジー待機することはできません。また、Twisted non-blocking待ちを使用して完了するタスクをチェックすることはおそらく非効率です。

インラインコールバックまたはdeferredGeneratorで問題を解決できますか?彼らはモダンなツイステッドが必要です。 See the twistedmatrix docs

def thingummy(): 
    thing = yield makeSomeRequestResultingInDeferred() 
    print thing #the result! hoorj! 
thingummy = inlineCallbacks(thingummy) 

別のオプションは、同じSQLテンプレート、runInteraction、ブロック、および繰延返しによってRunQueryを、使用して1つを使用するものを実行する2つのメソッドを持っているだろうが、それはやるより多くのコードパスを伴うだろう同じこと。

0

私が見たすべてのデータベースライブラリは、頑強に同期しているようです。

Twisted.enterprise.abapiはスレッドを使用して接続プールを管理し、基盤となるデータベースライブラリをラップすることでこの問題を解決しているようです。これは明らかに理想的ではありませんが、うまくいくと思いますが、実際に試したことはありません。

理想的には、sqlalchemyとツイストを統合する方法があります。私はこのプロジェクト、nadbapiを見つけましたが、2007年以来更新されていないようです。

関連する問題