rendre une boucle asynchrone

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

bonjour

j'ai ce bout de code

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
import fileinput
import csv 

csv_reader = csv.reader(fileinput.input())

for row  in csv_reader:
    with open(row[1], "a") as po_file:
        po_file.write("%s\n" % row[0])

que j'aimerai rendre asynchrone, y'a des manieres elegantes de faire dans les pythons modernes ?

Édité par juke

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Salut.

À ma connaissance il n'y a pas de wrapper équivalent au module csv qui soit compatible avec asyncio.

Par contre pour ce qui est de récupérer le contenu du fichier d'input et écrire les données dans les fichiers de sortie de façon asynchrone, la bibliothèque aiofile fait exactement le job.

Je suppose que tu peux donc :

  • Récupérer l'input de façon asynchrone avec aiofile,
  • parser celle-ci avec le module csv (quoique là, un simple split(',') sur chaque ligne semble largement suffire),
  • ouvrir les fichiers de sortie (en mode "ajout") de façon asynchrone avec aiofile,
  • écrire dedans de façon asynchrone.

Édité par nohar

I was a llama before it was cool

+1 -0

Cette réponse a aidé l'auteur du sujet

Hello!

C'est pas vraiment ce que tu demandes, mais est-ce qu'il y a une bonne raison de ne pas passer par un thread ? Du genre

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import fileinput, csv, threading

def worker(fname, fcontent):
    with open(fname, "a") as po_file:
        po_file.write("%s\n".format(fcontent))

thds = []
csv_reader = csv.reader(fileinput.input())
for row  in csv_reader:
   thds.append(threading.Thread(target=worker, args=(row[0],row[1],)))
+1 -0
Auteur du sujet

Par contre pour ce qui est de récupérer le contenu du fichier d'input et écrire les données dans les fichiers de sortie de façon asynchrone, la bibliothèque aiofile fait exactement le job.

es tu sûr du nom de la bibliothèque ?

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte