2016-06-24 3 views
0

これは以前に尋ねられたと確信していますが、私は見渡して何も見つかりませんでした!これが重複しているとわかったら、私に叫ぶのではなく、ちょうどリンクをつけたり、詳細をコピーしてください。マルチプロセッシングでのPythonの同期変数

とにかく、私は、このデータ構造を持っている。このように:

data = { 

    'sysstats': { 
     'sysgen_time': datetime.now (), 
     'sysgen_text': time.strftime ("%d-%b-%y %H:%M:%S"), 
     'connections': 0 
    }, 

    'test': { 
     'text': "ok" 
    } 

}; 

今、私はあなたが何かを入力すると、データ[「テスト」] [「テキスト」]が何であるかを返すいくつかのコードを持って、そしてあなたの場合パラメータを追加すると変更されます。コマンドを実行すると、それを返すことができ、変更した内容が返されます。

データ変数をバックアップする機能がありますので、後で再度読み込むことができます。それはマルチプロセッシング(マルチプロセシングプロセス)で実行されていますが、テキストが更新された後でも、マルチプロセスで "ok"の前の状態になります。このマルチプロセスをデータ変数と同期させます。

ただ、バックアップコードがあるので、私はマルチプロセッシングを使用していた理由は...私が持っている、とあなたは一つのプロセスやファイルの残りの部分との間で同期する方法を上の例を作成してください

をデータ構造を使用しますwhileループで3分かかっているかどうかをチェックするので、バックアップすることができます...メインコードにはすでにバックアップループを置く必要があるwhileループがあるので、マルチプロセッシングに進んでいます...

助けて!私はスレッドに入れてみましたが、すべてのテキストを非常にゆっくりと印刷しました。すべてがうんざりになりました。したがって、マルチプロセッシングはすべて私ができることです。

+0

変数をすべてのスレッドにアクセス可能にし、sync_upを実行するにはthreading.Lockを使用します。/ – LumiG

+0

'multiprocessing.Manager'を使ってプロセス間で同期をとることができます。しかし、これは本当に 'threading'のためのより良い仕事のようです... – mgilson

答えて

0

よく、の再設計の可能性を示唆しているでしょうか?

あなたが見つけるためにビジー待機をやっているプロセス/スレッド立ち上げてきたことを、あなたの説明から、らしい「3分で行っている場合を。」

...とはその後、は「残念ながら、問題をさらに悪化させるために、」そのバックアップを続行しようとしている、非同期「他のプロセス」の活動にすることになっていますということバックアップ!

"Yuck!"

代わりにを試してみませんか?代わりにですか? 「最後のバックアップの時刻」であるタイムスタンプをキャプチャします。次に、既存のwhileループの中で、このタイムスタンプを「現在の時刻」と比較するコードを追加します。少なくとも3分はまだですか?その場合は、バックアップを実行します。 (はい、メインループは、したがって、あなたは何バックアップが取得することは安定になることを知っている、バックアップが完了するまで、延期されますが。)私は強く(であなたの質問に答える

理由)再設計を提案することは、あなたの現在の戦略が絶えず「競合状態」に絡み合っていると感じていることです。 (あなたが見ているのは、単に「最初の」です)したがって、私は鈍く言っています。"先にブリッジアウト"!( "やり直してください")

関連する問題