私はddbmock プロジェクトに取り組んでいます。基本的にはAmazonのDynamoDB APIを再現したサーバーです。
この実装にはスレッドが直接関与していませんが、マルチスレッド環境で実行される可能性が非常に高く、現時点では、予測できない「機能」があることがわかっています:) すべてのスレッドが同じストアで動作します...
最初のステップはミューテックスを追加することですが、見落としがなく、デザインが実際に機能していることをどのようにテストできますか? 信頼できる方法はありますか?
私はddbmock プロジェクトに取り組んでいます。基本的にはAmazonのDynamoDB APIを再現したサーバーです。
この実装にはスレッドが直接関与していませんが、マルチスレッド環境で実行される可能性が非常に高く、現時点では、予測できない「機能」があることがわかっています:) すべてのスレッドが同じストアで動作します...
最初のステップはミューテックスを追加することですが、見落としがなく、デザインが実際に機能していることをどのようにテストできますか? 信頼できる方法はありますか?
@martineau、問題はCPythonに限定されていません。共有リソースがある場合はいつでも、同時実行の問題につながる可能性があります。
1つの方法は、それを完全に回避することです。すべてをシリアル化し、同時実行を許可しません。これがメモリ内のモックサーバーであることを考えると、これは妥当な制限である可能性があります。
ただし、並列アクセスを提供したい場合、私が使用する戦略は、さまざまな要求を長期間使用してシステムのストレステストを行うことです。これは、多くの競合状態のバグを振り払う傾向があります。そうでなければ、プログラムに並行性のバグがないことを証明する信頼できる方法がないことを私は知っています。
これを見ると、CPythonで必要なことを確実に実行する方法がないことがわかります。これは、PythonがすべてをOSに委ねているからです。スケジューリングを(アクティブに)制御することはありません。GILを解放するだけで、必要に応じてOSにコンテキストスイッチを実行させることがあります。これは、マルチコアコンピューターにいくつかの醜い結果をもたらします。
とにかく他の言語では、それは本当に難しいことでもあります。並行プログラムのデバッグは地獄です。そのため、(信頼性の高いテストを行いたい場合は)可能な限り回避する必要があります。