J'essaye de créer des ouvriers pour une tâche qui implique de lire beaucoup de fichiers et de les analyser.Multiprocessing stockant un tableau de chaînes en lecture seule pour tous les processus
Je veux quelque chose comme ceci:
list_of_unique_keys_from_csv_file = [] # About 200mb array (10m rows)
# a list of uniquekeys for comparing inside worker processes to a set of flatfiles
je besoin de plus de fils car il va très lent, en faisant la comparaison avec un processus (10 minutes par fichier).
J'ai un autre ensemble de fichiers plats que je compare le fichier CSV à, pour voir si des clés uniques existent. Cela semble être une carte qui réduit le type de problème.
main.py:
def worker_process(directory_glob_of_flat_files, list_of_unique_keys_from_csv_file):
# Do some parallel comparisons "if not in " type stuff.
# generate an array of
# lines of text like : "this item_x was not detected in CSV list (from current_flatfile)"
if current_item not in list_of_unique_keys_from_csv_file:
all_lines_this_worker_generated.append(sometext + current_item)
return all_lines_this_worker_generated
def main():
all_results = []
pool = Pool(processes=6)
partitioned_flat_files = [] # divide files from glob by 6
results = pool.starmap(worker_process, partitioned_flat_files, {{{{i wanna pass in my read-only parameter}}}})
pool.close()
pool.join()
all_results.extend(results)
resulting_file.write(all_results)
J'utilise à la fois un linux et un environnement Windows, donc peut-être que j'ai besoin (discussion toute la fourche()) quelque chose compatible multi-plateforme. Question principale: Ai-je besoin d'une sorte de pipe ou de file d'attente, je n'arrive pas à trouver de bons exemples de transfert autour d'un grand tableau de chaînes en lecture seule, une copie pour chaque processus de travail?
oui, mais la question principale est que je vais avoir, chaque processus/fil tout , doit avoir le même tableau global 'read_of_unique_keys_from_csv_file' en lecture seule ... Cependant, quand j'essaie d'imprimer ce que nous avons dans le processus, il semble qu'il a divisé/divisé le tableau ou quelque chose. Ce n'est pas ce que je veux. Je veux copier le tableau ORIGINAL sur tous les threads/tous les processus. Peut-être que j'ai besoin de lire le fichier principal dans chaque worker, mais je pense qu'il serait idiot d'avoir 200 travailleurs lisant exactement le même fichier au démarrage (donc mon thread principal le lit puis copie le tableau à tout) – Dexter
@Dexter , 'results = pool.starmap (func, [(un_fichier, list_of_unique_keys_from_csv_file) pour one_file dans partitioned_flat_files])' – Sraw
Ouais cela a fonctionné, je me demande pourquoi la méthode itertools ne fonctionne pas. Merci. – Dexter