multiprocessingのサンプルコード
multiprocessingのサンプルコード。
マルチコア処理してほしい&処理には共通の情報を利用する、という条件あり。
メンバ変数の書き換えは、returnには反映されるが、実行のたびに1に戻っている感じ。
# -*- coding: utf-8 -*- from multiprocessing import Pool import time import os def f(x): print("f(x)",os.getpid()) time.sleep(1) print(x) return x*x class MyClass(): def __init__(self): print("init MyClass") self.foo=1 #共通の情報 def g(self,x): print("MyClass g(x)",os.getpid()) time.sleep(1) #共通の情報にアクセスできる?→できた。 print(x,self.foo) #共通の情報の値を書き換えはできないみたい。returnには反映されるが、1に戻っている感じ。 self.foo=2 return x*x+self.foo if __name__ == '__main__': print("main()",os.getpid()) myclass=MyClass() #普通の関数を実行 with Pool(2) as pool: multiple_results = [pool.apply_async(f, (i,)) for i in range(5)] print([res.get() for res in multiple_results]) print("----------------------------") #クラスの中の関数を実行 #新しいpoolにしてるのでプロセスIDは変わる。 with Pool(2) as pool: multiple_results = [pool.apply_async(myclass.g, (i,)) for i in range(5)] print([res.get() for res in multiple_results])
実行結果
main() 6120 init MyClass f(x) 4252 f(x) 2784 0 f(x) 4252 1 f(x) 2784 2 f(x) 4252 3 4 [0, 1, 4, 9, 16]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-