あなたの問題は、複数のライターが1つのファイルに格納されている玩具データベース(つまりsqlite)にアクセスしようとしていることです。 Lockを使うと助けになるかもしれませんが、すべての待機待ち時間のためにマルチプロセスのスループットが低下します。本質的に、ロックチョークポイントはプログラムをシリアライズします。ほぼすべてのプラットフォーム上でMySQLやPostgresのいずれかを設定する
は簡単ですし、それらにアクセスするためのいくつかの優れたPythonモジュールがあります。そのうちの1つを使用すると、この問題は完全に解消されます。コメントする拡張応答のための
更新:
私はいつも「何の問題あなたが解決しようとしている?」、クライアント/学生に尋ねます私はを作成しようとしていないと仮定しています。データベースシステムを作成するだけです。 SQLite3は明確に定義された問題のセットでは問題ありませんが、マルチプロセスアクセスはではなく、のいずれかです。私は、あなたのプロジェクトのどの部分がマルチプロセスアクセスを必要としているのかを尋ねることができますが、これが必要であるとすでに決めていると思います。あなたのプログラミング能力やデータベースの仕組みを理解していないので、以下のことが少し基本的であれば私を許してください。
通常、データベース(私の好みはPostgres)と、そのデータベースとの会話の仕組みの詳細をすべて理解しているPythonモジュールが必要です。次に、あなたはDBMSをにしたいのかを知る必要があります。あなたのために。良いニュースは、あなたがこの道を下ることはほとんどないということです。
Postgres Wikiは良いものがいっぱいです。それらのページをPython Driversで見てください。 Psycopg2はカテゴリリーダーであり、Win/Linux/Mac上で動作します。よく書かれた多くの拡張機能については、Python Package Index PyPiもチェックしてください。
真っ直ぐなSQLを書くのではなく、オブジェクト指向のままにしたい場合は、SQLAlchemyのようにORMを見るとよいでしょう。これは、よく維持管理され広く普及している別のカテゴリーリーダーです。
ORMを使用することの価値は、オブジェクト指向プログラミングとリレーショナルデータベース管理によって作成された認知的不協和音で、問題のほとんどが抱えているObjectLandであなたの頭を(ほとんど)維持できることですこれは2つの非常に異なる世界のデータのビューです。
さらにヘルプが必要な場合は、私にメールしてください。私の住所は私のプロフィールにあります。
私はLock()を使ったことがありません。 Lock()でデータベースINSERT文を単純にラップすることはできますか、またはmultiprocessing.process文全体でLock()を使用する必要がありますか? –
sqliteを絶対に必要としない限り(なぜ誰に?)、この非常に複雑なホイール(つまり、マルチライターインターロック)を再構築することはお勧めしません。 Postgresを使用して、あなたの修士のプロジェクトに乗ってください。 –
データベースの主なアイデアは顧問によって提出されましたが、他のデータベース構造であれば大丈夫でしょう。私にとって最も懸念されるのは、フレームワークを操作するために他のPythonプラグインを使用したくないということです。 SQLiteと比べると、PythonのPostgresプラグインはどれくらい不便ですか? MySQLサーバーを利用する必要があるため、MySQLはやや難しいようです。 –