Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 并行执行for循环的n次迭代_Python_Python 2.7_Multiprocessing - Fatal编程技术网

Python 并行执行for循环的n次迭代

Python 并行执行for循环的n次迭代,python,python-2.7,multiprocessing,Python,Python 2.7,Multiprocessing,我们假设python中有一个嵌套的for循环,最里面的循环调用一些函数fun: for x1 in ['a','b','c','d','e']: for x2 in [1,2,3]: fun(x1,x2) 如何重写它,使n调用fun并行执行? 即,对于n==2,执行顺序为: fun('a',1)和fun('a',2)并行运行 当其中一个终止时,fun('a',3)启动 当其中一个终止时,fun('b',1)启动 。。。等等 如何以最具python风格的方式实现这一点

我们假设python中有一个嵌套的
for
循环,最里面的循环调用一些函数
fun

for x1 in ['a','b','c','d','e']:
    for x2 in [1,2,3]:
        fun(x1,x2)
如何重写它,使
n
调用
fun
并行执行? 即,对于
n==2
,执行顺序为:

  • fun('a',1)
    fun('a',2)
    并行运行
  • 当其中一个终止时,
    fun('a',3)
    启动
  • 当其中一个终止时,
    fun('b',1)
    启动
  • 。。。等等
如何以最具python风格的方式实现这一点?

您可以使用该模块:


来自多处理导入池的

来自itertools进口产品
如果名称=“\uuuuu main\uuuuuuuu”:
l1=['a','b','c','d','e']
l2=[1,2,3]
n=2
将池(n)作为池:
星图(乐趣,产品(l1,l2))
使用创建一行中的所有对:

>>列表(产品(['a',b',[1,2]))
[('a',1),('a',2),('b',1),('b',2)]
然后,我们可以使用
n
进程创建一个,并使用函数将每一对传递给
fun

通过创建并传递第一个参数
n
我们有
n
进程,这些进程从By顺序中获取每个元素,因此这正好创建了您想要的效果-每当其中一个元素释放时,它将获取下一个元素对。

您可以使用该模块:


来自多处理导入池的

来自itertools进口产品
如果名称=“\uuuuu main\uuuuuuuu”:
l1=['a','b','c','d','e']
l2=[1,2,3]
n=2
将池(n)作为池:
星图(乐趣,产品(l1,l2))
使用创建一行中的所有对:

>>列表(产品(['a',b',[1,2]))
[('a',1),('a',2),('b',1),('b',2)]
然后,我们可以使用
n
进程创建一个,并使用函数将每一对传递给
fun


通过创建并传递第一个参数
n
,我们有
n
进程从By顺序中获取每个元素,因此这正好创建了您想要的效果-只要其中一个释放出来,它就会获取下一个参数。

在列表中组合参数。然后可以使用
multiprocessing.Pool.starmap
调用具有多个参数的函数

from multiprocessing import Pool

x1 = ['a','b','c','d','e']
x2 = [1,2,3]

param_combinations = [(i, j) for i in x1 for j in x2] 

def func(x, y):
    return f'{x}_{y}'

with Pool(processes=3) as p:
    results = p.starmap(func, param_combinations)

>>>results
['a_1',
 'a_2',
 'a_3',
 'b_1',
 'b_2',
 'b_3',
 'c_1',
 'c_2',
 'c_3',
 'd_1',
 'd_2',
 'd_3',
 'e_1',
 'e_2',
 'e_3']

在列表中组合参数。然后可以使用
multiprocessing.Pool.starmap
调用具有多个参数的函数

from multiprocessing import Pool

x1 = ['a','b','c','d','e']
x2 = [1,2,3]

param_combinations = [(i, j) for i in x1 for j in x2] 

def func(x, y):
    return f'{x}_{y}'

with Pool(processes=3) as p:
    results = p.starmap(func, param_combinations)

>>>results
['a_1',
 'a_2',
 'a_3',
 'b_1',
 'b_2',
 'b_3',
 'c_1',
 'c_2',
 'c_3',
 'd_1',
 'd_2',
 'd_3',
 'e_1',
 'e_2',
 'e_3']

多处理多处理