2017-09-18 1 views
0

J'essaie de me familiariser autant que possible avec la compréhension de la liste. J'ai la boucle pythonique suivante:Convertir la compréhension de la liste en approche traditionnelle

p = multiprocessing.Pool(processes=multiprocessing.cpu_count()) 
for result in p.imap_unordered(process_next, [(x1, models, y1) for _ in range(iterations)]): 
    # some stuff 

Je ne sais pas si elle est équivalente à:

p = multiprocessing.Pool(processes=multiprocessing.cpu_count()) 
for result in p: 
    p.imap_unordered(process_next, [(x1, models, y1)]) 
    M = [] 
    for _ in range(iterations): 
     M.append(_) 

Veuillez, quelqu'un peut-il vérifier ma compréhension? Merci

+0

Non, ce n'est pas équivalent. Vous devriez probablement commencer par des exemples qui n'impliquent pas le multitraitement comme une distraction non pertinente –

Répondre

4

La compréhension de liste est un argument à un appel à p.imap_unordered(); vous auriez besoin de l'extraire d'abord:

_arg2 = [(x1, models, y1) for _ in range(iterations)] 
for result in p.imap_unordered(process_next, _arg2): 
    # ... 

Maintenant, vous pouvez étendre cela dans une boucle for traditionnelle:

_arg2 = [] 
for _ in range(iterations): 
    _arg2.append((x1, models, y1)) 
for result in p.imap_unordered(process_next, _arg2): 
    # ... 

La boucle for result in p.imap_unordered() et appel sont par ailleurs indépendant de la compréhension de la liste.

+0

Merci pour votre réponse – Medo