J'essaie de créer un script qui recherchera un fichier CSV. Si la ligne de la CSV rencontre une certaine condition, il exécutera un tandis que TRUE: boucle code>, c'est-à-dire que cela ne finira jamais. Cependant, je veux exécuter cette fonction pour plusieurs rangées de la CSV en même temps. with open('list.csv', "rt") as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if row['Name'] == "x":
doSomething()
else:
print("Not available")
3 Réponses :
Je pense que votre besoin est le filetage
Vous pouvez essayer quelque chose comme ceci:
Démarrage d'un fil pour chacun pour chacun n'est pas une bonne idée (si vous avez de nombreuses lignes). Vous pouvez configurer une piscine de fil à l'aide du module code> multiprocessionnaire code>. Voici un exemple que j'ai cuit à l'aide de la documentation Python 3 et de votre code. J'espère que cela aide. Vous pouvez mettre votre code dans la fonction recherche code>. Cela peut être fait sûrement mieux, mais cela fonctionne et démarre un nombre contrôlé de threads (8 comme vous pouvez le constater). import multiprocessing
import csv
def search(cond):
print("evaluating ", cond)
def calculate(func, args):
result = func(*args)
return "%s says that %s%s = %s" % (
multiprocessing.current_process().name,
func.__name__,
args,
result,
)
def calculatestar(args):
return calculate(*args)
if __name__ == "__main__":
multiprocessing.freeze_support()
multiprocessing.set_start_method("spawn")
with multiprocessing.Pool(8) as pool:
TASKS = []
with open("list.csv", "rt") as csvfile:
reader = csv.DictReader(csvfile)
TASKS = [(search, (row["Name"],)) for row in reader]
results = pool.imap(calculatestar, TASKS)
for x in results:
print(x)
Démarrez un thread pour
Dosomething code> sur chaque ligne. Regardez dans le module code> filetage code>