C'est un mémorandum.
2020/5/21 Ajout de la description de python3.8
sample.py
import os
def hoge(filename):
#Lisez le fichier et effectuez un traitement.
return data
data = [hoge(filename) for filename in os.listdir(".")]
J'aimerais faire quelque chose comme ça, mais si je transforme ce code tel quel, il n'utilisera qu'un seul noyau, donc c'est une perte de temps. Je veux le faire en parallèle.
sample.py
from multiprocessing import Pool
import os
def hoge(filename):
#Lisez le fichier et effectuez un traitement.
#Cette fonction peut être laissée telle quelle
return data
with Pool() as p:
data = p.map(hoge, os.listdir("."))
Fonctionne en parallèle avec.
sample.py
from tqdm import tqdm
from multiprocessing import Pool
import os
with Pool() as p:
imap = p.imap(hoge, os.listdir("."))
data = list(tqdm(imap, total=len(os.listdir("."))))
Il est bloqué pour une raison quelconque. Ceci est une réponse provisoire,
sample.py
from multiprocessing import Pool
import os
def hoge(filename):
#Lisez le fichier et effectuez un traitement.
#Cette fonction peut être laissée telle quelle
return data
if __name__=="__main__":
with Pool() as p:
data = p.map(hoge, os.listdir("."))
Cela semble fonctionner en faisant. Cependant, il semble que la variable
datacréée avec beaucoup d'efforts ne puisse être référencée que dans le cadre de
if name == "main" `` `.
De plus, auparavant, il était possible de s'exécuter en parallèle sur Jupyter, mais ce n'est pas possible dans Python 3.8.
Recommended Posts