documentationで言及されていない凸最適化の問題が、cvxopt packageで発生しました。誰が原因なのか、それを回避する方法が分かっているのだろうか。Pythonのマルチプロセッシングモジュールをcvxoptパッケージと共に使用する
のインスタンスを使用するPythonプログラムでimport cvxopt
を実行すると、プロセスを並列で実行できなくなるという問題があります。彼らは自動的に同期するようです。これは、実際にプログラムによってcvxopt
関数が使用されているかどうかにかかわらず発生します。単にパッケージをインポートするだけでこの効果が得られます。
例:
# import cvxopt
from multiprocessing import Queue, Process
def compute(queue):
"""
Pick integers from a queue and perform some useless
calculations on them just to keep the CPU busy.
"""
total = 0
while True:
item = queue.get()
if item is None:
break
for i in range(item):
total += i
if __name__ == '__main__':
queue = Queue()
procs = []
for i in range(4):
proc = Process(target = compute,
args = (queue,))
proc.start()
procs.append(proc)
for i in range(100000):
queue.put(i)
for proc in procs:
queue.put(None)
for proc in procs:
proc.join()
上記のスクリプトは、メインプログラムと並列に実行されている4つのプロセスを開始します。 4つのコアを持つマシンでは、4つのプロセスがあり、それぞれがCPUの100%を占めています。
ただし、開始時にimport cvxopt
ステートメントのコメントを外すと、各プロセスは、他のプロセスと同期されているかのように、CPUのわずか25%を占有してしまいます。
私は両方の説明と回避策に興味があります。私が見落とした文書に明らかな説明がある場合は、お詫び申し上げます。
私はこの下を実行しています
に環境を問題を再現する方法についての詳細は、Linux 3.5.0(Ubuntuの12.10分布)、とPython 3.2.3です。
はmatplotlibの1.2.1をインストールします(それがcvxoptサンプルスクリプトの多くで使用されているpylabを備えているので、私はこれをした、これは実際の要件である場合、私はわからないよ。):これは私がcvxoptをインストールする方法です。私はthis tar.gz packageを使って、
sudo python3 setup.py install
をインストールしました。インストールBLASおよびATLAS
sudo apt-get install libblas-dev libblas3 libatlas-base-dev libatlas3-base libblas-test libopenblas-base libopenblas-dev
上記はおそらく必要以上ですが、それが何か問題を起こした場合、私は驚かれることと思います。
tar.gzパッケージfrom hereと
sudo python3 ./setup.py install
を使用してインストールされたcvxopt 1.1.6。
あなたのOSに言及すると便利かもしれない、とするかどうかをあなたがhttps://github.com/cvxopt/cvxopt/blob/master/INSTALL –
@に記載されているオプションの依存関係のいずれかを使用していますJanneKarilaもう一度メモをお寄せいただきありがとうございます。私は今質問に詳細を追加しました。 – jogojapan