2016-06-20 18 views
1

2台のQuad-Coreプロセッサを搭載したMac Proを使用して、次のPythonループを並列化したいと思います。私の検索でPython for-loopを並列化する

result_list = [] 
for a in a_range: 
    for b in b_range: 
     for c in c_range: 
      result = call_fortran_program(a, b, c) 
      result_list.append(result) 

私はCythonとGILなどの用語全体を実行しましたが、それは続行する方法にはまだ私にははっきりしていません。

+2

は 'result_list.append(結果)' 'あなたの結果='ステートメントをたどるべきではないでしょうか。それ以外の場合、結果は1つだけになります。 –

答えて

5
from itertools import product 
from multiprocessing import Pool 

with Pool(processes=4) as pool: # assuming Python 3 
    pool.starmap(print, product(range(2), range(3), range(4))) 
1

これは、複数のプロセスを作成することにより、GILロックを回避することができますProcessPoolExecutor

を試してみてください。

ウェブサイトからの例:

import concurrent.futures 
import math 

PRIMES = [ 
    112272535095293, 
    112582705942171, 
    112272535095293, 
    115280095190773, 
    115797848077099, 
    1099726899285419] 

def is_prime(n): 
    if n % 2 == 0: 
     return False 

    sqrt_n = int(math.floor(math.sqrt(n))) 
    for i in range(3, sqrt_n + 1, 2): 
     if n % i == 0: 
      return False 
    return True 

def main(): 
    with concurrent.futures.ProcessPoolExecutor() as executor: 
     for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)): 
      print('%d is prime: %s' % (number, prime)) 

if __name__ == '__main__': 
    main() 
関連する問題