私は3つのPowershellを開き、それらのうちの3つで同じコードを実行したいだけです。そこに書かれたものがあるかどう
彼らはまったく同じロジックを持っていくように、それらのそれぞれがチェックするために互いのファイルにアクセスしようとします
プロセス1がclient1.txtを持って、プロセス2はclient2.txtを持っており、Process3は
をclient3.txtました上で動作するためにどの問題を選択する前に、どのようなプロセス3をチェックする必要がありますするとしてここではいくつかのコードは次のとおりです。私はコードを表現することを試みた何他の 'プロセス'が動作していない場合にのみファイルを読む
import os
while True:
f = 'C:\Users\Files'
i = {}
i['word'] = 'problem X' #just an example, I'll have a whole list
if os.path.exists(f):
try:
os.rename(f, f)
print 'Access on file "' + f +'" is available!'
file1 = open('C:\Users\Files\client1.txt', 'r+')
file2 = open('C:\Users\Files\client2.txt', 'r+')
if file1.read() == i['word']:
print "A process is already working on this problem, check another"
elif file2.read() == i['word']:
print "A process is already working on this problem, check another"
else:
print "Found a new problem to work on"
file3 = open('C:\Users\Files\client3.txt', 'r+')
file3.write(i['word'])
file1.close()
file2.close()
file3.close()
except OSError as e:
print 'Access-error on file "' + f + '"! \n' + str(e)
time.sleep(5)
pass
は次のとおりです。他の人がいない場合、私は唯一のプロセスが問題を開始したいです彼らはすべて同じロジックを持っているので、同じ問題を解決しようとします(私は解決が必要なものがたくさんあります)ので、プログラムとほぼ同時に到達するかもしれませんwhile True
と続きます。
問題が終了すると、ファイルの内容が削除され、新しい問題が選択され、それが自分のファイルに書き込まれ、他の人が後でチェックできるようになります。
process1が最初に動作する問題( 'AAA')を見つけた場合、それらはすべて空のtxtファイルを持ち、txt2とtxt3をチェックして、それが( 'AAA ')、それをそれ自身のファイルに書き込んで閉じます。
私はtxt1とtxt3の両方を読み取って、すでに( 'AAA')が働いていることを確認してから、もう一度それをリストに入れ、もう一度チェックして、 BBB ')は大丈夫です。それはそれ自身のファイルに書きます。
終了すると、文字列がtxtから削除され、別の文字列が検索され始めます。
両方のプロセスが同時にファイルをチェックしようとする問題があります。他のプロセスがファイルを使用している場合に、プロセスにtime.sleep()
を置く方法がある場合は、もう一度やり直してください。
ない重複しますが、おそらく関連:https://stackoverflow.com/questions/30407352/how-to-prevent-a-race-condition-when-multiple-processes-attempt-to -write-to-and – paisanco
@paisanco私は一般的な考え方を理解しています。私はPythonを初めて使う人ですが、それは本当に面白いです。彼らが言及しているブロックは、私が望むプロセスの種類や、単にスレッド/マルチプロセスや、「リンク」を持つものをブロックすると思いますか? – Tax