私はPBKDF2を使用していますが、これはBCryptにも同様に当てはまります。
妥当な反復回数でパスワードをハッシュすると、0.5秒間簡単にブロックできます。これをプロセスから取り除くための軽量な方法は何ですか?この操作のためだけにCeleryやGearmanのようなものをセットアップするのは気が進まない。
スレッドを使用できます。これは竜巻をブロックしません。パスワードをハッシュするハンドラーがあるとします。次に、2つの関連するメソッドは次のようになります。
import threading
def on_message(self, message):
# pull out user and password from message somehow
thread = threading.Thread(target=self.hash_password, args=(user, password))
thread.start()
def hash_password(self, user, password):
# do the hash and save to db or check against hashed password
メソッドでスレッドが終了するのを待ってからon_message
応答を書き込むか、応答を送信する必要がない場合は、スレッドを終了させて結果をhash_password
メソッドに保存することができます。
スレッドが終了するのを待つ場合は、その方法に注意する必要があります。time.sleep
ブロックするので、代わりにトルネードの非ブロック待機を使用する必要があります。