J'essaye de traiter un fichier en utilisant le noyau unique de mon CPU. Mais je suppose que ce n'est pas suffisant d'utiliser un seul noyau. Au lieu de cela, si j'avais accès aux multiples cœurs de mon système, je pourrais accélérer et accélérer le processus.en utilisant Multi Thread pour le traitement de fichiers en utilisant python3
Mais malheureusement, je sais traiter un fichier en utilisant un seul coeur. Voici ce que je faisais:
data = open('datafile','r',encoding='ascii',errors='ignore')
for line in data.readlines():
splitted = line.lower().strip().split()
check = process(splitted[0],splitted[1])
if check == '':
pass
data.close()
Je veux savoir comment je peux utiliser la capacité totale de la CPU pour le traitement Teh process()
tout en prenant le line
séparément et obtenir la sortie comme vous le souhaitez? Même comment je peux éviter l'état de blocage du thread pendant le traitement car cela peut être dangereux pour la sortie du processus.
S'il vous plaît partagez votre point de vue avec moi.
Quelle impasse? L'état d'interblocage nécessite au moins une serrure, vous savez? Maintenant que Python a cette chose appelée GIL, la seule façon d'utiliser plusieurs cœurs est d'utiliser des processus au lieu de threads. Maintenant, le disque parallèle io peut ou non augmenter les performances (en fonction du disque que vous avez), ce que je suggère est d'utiliser 'multiprocesing.Pool' et d'y envoyer des" morceaux "du processus principal pour le traitement parallèle. – freakish
@freakish plonger le fichier dans des morceaux peut perdre des données, ce que je ne veux pas, car il est un peu important de maintenir les données complètes. –
Pourquoi perdrait-il les données? Vous venez de lire ligne après ligne et d'envoyer chaque ligne à un processus enfant. Il n'y a pas de perte de données ici. – freakish