我正试图在python中将'double-for-loop'更改为'for+multiprocessing'。
(我无法想出将double-for-loop更改为一个多处理代码,而不是+multiprocessing的想法(
函数a对不同的i和j(环路的第一个和第二个(给出不同的结果
我将第二个循环(j(改为多处理。Pool((,它有效。
然而,如果我使用第一个for循环和第二个循环(多处理(,在函数a中,第一个循环的索引不会改变。
如果我运行下面的代码,多处理可以工作,但是函数a中的y不会改变。
我试着使用global,但它不起作用。我该怎么办?
from multiprocessing import Pool
import multiprocessing
y = 0
def functiona(i):
# global y
print('y', y, i)
if __name__=='__main__':
start_time = datetime.now()
pool = multiprocessing.Pool() # pool = Pool(processes=16)
for t in range(0, 10):
print('t : ', t)
y = t
result = pool.map(functiona, range(0, 10))
print("- %s seconds -" % (datetime.now() - start_time))
这就是您想要实现的目标吗?:
import multiprocessing
from datetime import datetime
y = 0
def functiona(i,y):
# global y
print('y', y, i)
if __name__=='__main__':
start_time = datetime.now()
pool = multiprocessing.Pool() # pool = Pool(processes=16)
functiona_args = []
for t in range(0, 10):
print('t : ', t)
y = t
for i in range(0,10):
functiona_args.append((i,y,))
result = pool.starmap(functiona, functiona_args)