2013-06-17 6 views
5

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です。

  1. はmatplotlibの1.2.1をインストールします(それがcvxoptサンプルスクリプトの多くで使用されているpylabを備えているので、私はこれをした、これは実際の要件である場合、私はわからないよ。):これは私がcvxoptをインストールする方法です。私はthis tar.gz packageを使って、sudo python3 setup.py installをインストールしました。

  2. インストールBLASおよびATLAS

    sudo apt-get install libblas-dev libblas3 libatlas-base-dev libatlas3-base libblas-test libopenblas-base libopenblas-dev 
    

    上記はおそらく必要以上ですが、それが何か問題を起こした場合、私は驚かれることと思います。

  3. tar.gzパッケージfrom heresudo python3 ./setup.py installを使用してインストールされたcvxopt 1.1.6。

+1

あなたのOSに言及すると便利かもしれない、とするかどうかをあなたがhttps://github.com/cvxopt/cvxopt/blob/master/INSTALL –

+0

@に記載されているオプションの依存関係のいずれかを使用していますJanneKarilaもう一度メモをお寄せいただきありがとうございます。私は今質問に詳細を追加しました。 – jogojapan

答えて

1

多分、Python GILとは何か関係がありますか?

参照:http://comments.gmane.org/gmane.comp.python.scientific.user/15678

+0

これには関係があるかもしれませんが、これをよりよく理解したいと思います。私が知る限り、 'マルチプロセッシング'モジュール( 'threading'モジュールとは対照的に)はGILの影響を直接受けるべきではありません。 – jogojapan

関連する問題