Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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循环和一些函数?_Python_Parallel Processing_Multiprocessing_Python Multiprocessing - Fatal编程技术网

Python 如何使用并行处理来运行for循环和一些函数?

Python 如何使用并行处理来运行for循环和一些函数?,python,parallel-processing,multiprocessing,python-multiprocessing,Python,Parallel Processing,Multiprocessing,Python Multiprocessing,我有一个算法,它有几个for循环和一些函数,有时需要按顺序运行,有时可以并行运行。我在下面提供一个伪代码和一个示例 这里,m是一个数学模型,我试图将变量添加到模型m。for循环彼此独立(我有几个这样的for循环,不是2个) 一旦模型m完全构建,即所有for循环都完成,我就有了解决优化问题的命令。这只能在模型完全构建之后进行。因此,下一个命令是: z,Q = Solve(m) 接下来,我将使用其他for循环从modelm复制结果。这些不能直接使用,必须以我使用的方式复制 for i in ran

我有一个算法,它有几个for循环和一些函数,有时需要按顺序运行,有时可以并行运行。我在下面提供一个伪代码和一个示例

这里,
m
是一个数学模型,我试图将变量添加到模型
m
for
循环彼此独立(我有几个这样的for循环,不是2个)

一旦模型
m
完全构建,即所有for循环都完成,我就有了解决优化问题的命令。这只能在模型完全构建之后进行。因此,下一个命令是:

z,Q = Solve(m)
接下来,我将使用其他for循环从model
m
复制结果。这些不能直接使用,必须以我使用的方式复制

for i in range(1,N+1):
    for d in range(1,delta+1):
        for t in range(1,T+1):
            for k in range(1,K+1):
                z_value[(i,d,t,k)] = z[(i,d,t,k)].X

for k in range(1,K+1):
    for d in range(1,delta+1):
        Q_value[(i,inst)] = Q[(k,d)].X
这一部分也相互独立。我有两个以上的循环要运行


有没有一种方法可以对代码的这些部分使用并行处理。如何做到这一点?

您可以使用将嵌套循环减少为一个循环,例如,您的第一个循环可以使用无嵌套简化为以下示例:

from itertools import product

for idtk in product(range(1,N+1), range(1,delta+1), range(1,T+1), range(1,K+1)):
    #idtk is a tuple the same as (i, d, t, k)
    z[idtk] = m.addVar(vtype = GRB.BINARY, name="z%d,%d,%d,%d" % idtk)

你能不能用这里代替多线程?当然,但我不确定intertools.product是否一定比嵌套for循环快。我不是专家,但以下是我最初编写代码时的发现
from itertools import product

for idtk in product(range(1,N+1), range(1,delta+1), range(1,T+1), range(1,K+1)):
    #idtk is a tuple the same as (i, d, t, k)
    z[idtk] = m.addVar(vtype = GRB.BINARY, name="z%d,%d,%d,%d" % idtk)