Je veux ouvrir 3 Powershell et exécuter le même code à 3 d'entre eux, juste des fichiers différents.
Comme ils ont exactement la même logique, chacun d'entre eux tenteront d'accéder à chaque autres fichiers pour vérifier s'il y a quelque chose d'écrit il
Process1 a client1.txt, Process2 a client2.txt et processus3 a client3.txt
Voici un code à ce processus 3 doit vérifier avant de choisir quel problème pour travailler sur:Lire un fichier, seulement si aucun autre 'processus' ne fonctionne
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
ce que j'ai essayé de représenter à travers le code: Je veux seulement un processus pour démarrer un problème si les autres ne sont pas travailler dessus déjà, car ils ont tous la même logique qu'ils essaieront de résoudre le même problème (j'ai beaucoup à résoudre) et donc ils pourraient atteindre à peu près en même temps que le programme continue avec le while True
.
Lorsque le problème est résolu, il supprime le contenu du fichier et sélectionne un nouveau problème, puis écrit le problème sur lequel il travaille dans son propre fichier pour que les autres vérifient plus tard. Juste pour être un peu clair: disons que process1 a trouvé un problème de travail en premier ('AAA'), ils ont tous des fichiers txt vides, ça va vérifier txt2 et txt3 et voir que ce n'est pas égal à ('AAA '), alors il va l'écrire dans son propre fichier et le fermer.
Je veux process2 qui pourrait y arriver une seconde plus tard pour lire à la fois txt1 et txt3 et voir que ('AAA') est déjà en train d'être travaillé, il aura le prochain dans la liste et vérifier à nouveau, voir (' BBB ') va bien et va écrire sur son propre fichier.
Quand il se termine, il supprime la chaîne du txt et commence à chercher un autre.
Il y a le problème des deux processus essayant de vérifier les fichiers en même temps. Peut-être que s'il y a un moyen de mettre un time.sleep()
à un processus si un autre processus utilise le fichier, puis réessayer un peu plus tard?
pas un doublon, mais peut-être pertinente: https://stackoverflow.com/questions/30407352/how-to-prevent-a-race-condition-when-multiple-processes-attempt-to -write-to-and – paisanco
@paisanco Je ne comprends que l'idée générale, car je suis novice en python, mais c'est vraiment intéressant. Pensez-vous que le bloc dont ils parlent bloque le type de processus que je veux ou simplement le filetage/multiprocessus et tout ce qui a un 'lien'? – Tax