通常、RDBMSドライバはブロックされていますが、Tornadoはブロックされていないサーバです。これは、SQLクエリが終了するまでIOLoopがブロックされるため、CRUD操作を実行する際に非同期的に非同期的に使用されます。Tornado RDBMS統合
(ACIDのために)RDBMSをデータベースとして使用するプロジェクトに取り組んでいますが、いくつかの機能的な機能(つまりプッシュ通知)を編成するためにWebソケットが必要です。通常のRESTとWebソケットは1つのアプリケーションで実装できます。
私は(:https://gist.github.com/methane/2185380こちら):このスニペットを見つけたウェブの閲覧
import time
from tornado.concurrent import run_on_executor
from concurrent.futures import ThreadPoolExecutor # `pip install futures` for python2
MAX_WORKERS = 4
class Handler(tornado.web.RequestHandler):
executor = ThreadPoolExecutor(max_workers=MAX_WORKERS)
@run_on_executor
def background_task(self, i):
""" This will be executed in `executor` pool. """
time.sleep(10)
return i
@tornado.gen.coroutine
def get(self, idx):
""" Request that asynchronously calls background task. """
res = yield self.background_task(idx)
self.write(res)
は何それは基本的にないのは、別のスレッドにCRUDタスクをプッシュします。 私の質問は、これは、非同期HTTPサーバーを使用している場合、RDBMSドライバーをブロックするというデフォルトのアプローチですか?これらのブロックボトルネックを最小限に抑える他の方法はありますか?非同期サーバーでブロッキングRDBMSドライバーを使用するのも合理的ですか?
感謝を!私はすべてのPython非同期RDBMSドライバ/ ORMが信頼できるものではないことを読んだ。人々は「ORMを作成するのは難しいです、それを正しく行うことはさらに困難です」と言っています。また、非同期DBアクセスを使用する場合のconcurencyはどうでしょうか? – lime
asyncio + Tornadoを使用する目的は何ですか?彼らは両方ともIOLoopsを持っています、なぜ単にデフォルトのTornadoを使用しないのですか?ウェブ以外のものであっても、Tornadoのループは同じマナーでうまく使用できます。 – lime
1.信頼性に関する限り、まだ問題はありませんでしたが、それは問題がないとは限りません。同期のものよりも非同期のものを使用している人が少ないため、目が少なくても、より多くの問題が予想されます。 2. ORMが難しいことに同意します。私は、ActiveRecordの実装に基づいてORMが嫌いです。私はPostgresのみを使用しているので、私はオブジェクトと関係のマッピングのみを行う1つのファイルormを作成し、他のものは作成しませんでした。 3.非同期で並行処理が問題になることがあります。少なくとも非同期機能をオンにしたときはポストグルでは使用できず、自動txnを使用できません。 –