【发布时间】:2013-06-17 08:31:18
【问题描述】:
我刚刚遇到了cvxopt package 用于凸优化的问题,我在documentation 中没有发现这个问题。我想知道是否有人知道导致它的原因以及如何最好地解决它。
问题在于,当您在使用 multiprocessing.Process 实例的 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()
上面的脚本启动了四个与主程序并行运行的进程。在具有四个内核的机器上,我有四个进程,每个进程占用 100% 的 CPU。
但是,如果在开始时取消注释 import cvxopt 语句,每个进程最终只占用 25% 的 CPU,就好像它与其他进程同步一样。
我对解释和解决方法都感兴趣。如果我忽略的文档中有明显的解释,我深表歉意。
有关如何重现问题的详细信息
我运行它的环境是 Linux 3.5.0(Ubuntu 12.10 发行版)和 Python 3.2.3。这就是我安装 cvxopt 的方式:
安装 matplotlib 1.2.1(我这样做是因为它包含 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以上可能是多余的,但如果这引起任何问题,我会感到惊讶。
已安装 cvxopt 1.1.6,使用 tar.gz 包 from here 和
sudo python3 ./setup.py install。
【问题讨论】:
-
提及您的操作系统以及您是否使用github.com/cvxopt/cvxopt/blob/master/INSTALL中列出的任何可选依赖项可能会有所帮助
-
@JanneKarila 再次感谢您的来信。我现在已经为这个问题添加了更多细节。
标签: python python-3.x multiprocessing cvxopt