我可以同时运行多个Ipython qt控制台吗?

时间:2014-04-27 18:32:24

标签: python multiprocessing ipython qtconsole

对于知道这一点的人来说,这应该非常简单,但我不是其中之一。我搜索了很多关于多处理的内容,但它让我更加困惑......

我需要处理大约160个数据文件独立。我有一些处理数据的功能,比如f(arg1,arg2)。我的电脑的CPU是i7-3770(4核8线程)。我想知道我是否可以打开8个iptyhon qt控制台来运行同一个函数(通过将函数复制到每个控制台)同时使用不同的arg1和arg2值?

或者是否有一个非常简单的例子,通过在python中使用多处理来完成这样的任务?

我对编码知之甚少,我只是使用pandas,numpy和scipy来处理数据。我使用Anaconda作为我的python环境。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

multiprocessing模块适用于此用例。

其用法的一个简单完整示例是:

import multiprocessing

def my_function(x):
    """The function you want to compute in parallel."""
    x += 1
    return x


if __name__ == '__main__':
    pool = multiprocessing.Pool()
    results = pool.map(my_function, [1,2,3,4,5,6])
    print(results)

调用pool.map将使用参数my_function执行1,然后2等执行,但并行执行。

请注意my_function只接受一个参数。如果你有一个f函数需要n个参数,那么只需编写一个函数f_helper

def f_helper(args):
    f(*args)

将参数打包成元组。例如:

results = pool.map(f_helper, [(1,2,3), (4,5,6), (7,8,9)])

相当于:

[f(1, 2, 3), f(4, 5, 6), f(7, 8, 9)]

但是f的调用是并行执行的。


注意:由于代码将在不同的进程中运行,因此f的任何副作用都不会被保留。例如,如果您修改原始参数,主进程将看到此更改。您必须认为参数是复制并传递给子进程,子进程计算结果再次复制进入主进程。

如果您尝试计算的函数没有花费足够长的时间,复制参数和返回值可以花费更多时间,然后连续运行代码。


该文档包含模块的各种examples用法。

答案 1 :(得分:0)

我正在运行完全相同的代码:

import multiprocessing

def my_function(x):
    """The function you want to compute in parallel."""
    x += 1
    return x


if __name__ == '__main__':
    pool = multiprocessing.Pool()
    results = pool.map(my_function, [1,2,3,4,5,6])
    print(results)

在Windows上的ipython QT控制台中。但是,就像上面的海报一样,代码不起作用 - QT控制台只是冻结了。

对此有任何解决方案吗?