对于知道这一点的人来说,这应该非常简单,但我不是其中之一。我搜索了很多关于多处理的内容,但它让我更加困惑......
我需要处理大约160个数据文件独立。我有一些处理数据的功能,比如f(arg1,arg2)。我的电脑的CPU是i7-3770(4核8线程)。我想知道我是否可以打开8个iptyhon qt控制台来运行同一个函数(通过将函数复制到每个控制台)同时使用不同的arg1和arg2值?
或者是否有一个非常简单的例子,通过在python中使用多处理来完成这样的任务?
我对编码知之甚少,我只是使用pandas,numpy和scipy来处理数据。我使用Anaconda作为我的python环境。
非常感谢您的帮助!
答案 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控制台只是冻结了。
对此有任何解决方案吗?