7
votes

Python et performance des compréhensions de la liste

Supposons que vous ayez une compréhension de liste dans Python, comme xxx

avec f être une fonction sans effets secondaires. Donc, toutes les entrées peuvent être calculées indépendamment.

est python capable d'augmenter la performance de cette compréhension de la liste par rapport à la mise en œuvre "évidente"; par exemple. Par parallèle de mémoire partagée sur les processeurs multicœurs?


1 commentaires

Je ne pense pas que Python puisse, mais il y a d'autres informations dans une question similaire Stackoverflow.com/Questions/5236364/... .


3 Réponses :


8
votes

Non, Python ne fera pas la parallélise magiquement cela pour vous. En fait, cela ne peut pas, car il ne peut pas prouver l'indépendance des entrées; Cela nécessiterait une grande partie de l'inspection / vérification du programme, qui est impossible à obtenir dans le cas général.

Si vous voulez un parallélisme multicœur à grain grossier, je recommande JOBLIB à la place: P>

from joblib import delayed, Parallel
values = Parallel(n_jobs=NUM_CPUS)(delayed(f)(x) for x in range(1000))


0 commentaires

0
votes

Essayez si ce qui suit peut être plus rapide: xxx

c'est une manière fonctionnelle à coder

une autre idée consiste à remplacer toutes les provenances de valeurs Dans le code par l'expression génératrice xxx


0 commentaires

8
votes

in python 3.2 Ils ont ajouté Concurrent.Futures , une belle bibliothèque pour résoudre les problèmes simultanément. Considérez cet exemple:

>>> bench(listcomp)
Completed in 14.463825941085815 seconds
>>> bench(concurrent)
Completed in 3.818351984024048 seconds


1 commentaires

Vous voudrez peut-être utiliser un décorateur pour votre fonction "banc", car il s'agit déjà d'un décorateur déjà.