私は異なるプロセスが呼び出せる共有関数を実行しようとしています。見つかった唯一の方法は、この関数を含むクラスを作成することです(this previous question参照)。しかし、今私が直面している問題は、プロセスが何かを待っているように見えることで、単一の論理コアの力だけを使用することです(イメージ参照)。マルチプロセスは単一の論理コアを使用しているようです
私は次のコードで同じ問題を再現するために成功しました(それが簡素化されました):
#!/usr/bin/python
from multiprocessing import Pool
from multiprocessing.managers import BaseManager
from itertools import repeat
class FunctionManager(BaseManager):
pass
class MaClass:
def maFunction(self, val):
print(str(val))
for i in range(0, 10000):
for j in range(0, 10000):
for k in range(0, 10000):
pass
FunctionManager.register('MaClass', MaClass)
myManager = FunctionManager()
myManager.start()
monObjet = myManager.MaClass()
p = Pool()
p.imap_unordered(monObjet.maFunction, range(10))
p.close()
p.join()
myManager.shutdown()
任意のアイデア?
Pythonは(まだ)サポートしていません。真のマルチスレッド並列実行* 1つのインタプリタインスタンス内*。いくつかのPythonインタプリタを起動して、複数のスレッドがお互いをブロックせずに同時に実行されているコンテキストを実現することができます。 – Ukimiku
@Ukimiku彼は 'multiprocessing'モジュールを使用しています。 – tdelaney
スレッドではなく_processes_です。それは正常に動作するようです。しかし、10のプロセスでは、それぞれ100%のCPUで実行するために10個のコアが必要です。 –