我有一个数字列表。我想对列表中的每个数字执行一些耗时的操作,并创建一个包含所有结果的新列表。下面是我有什么简化版本:在Python中使用线程/多处理来同时进行多个计算
def calcNum(n):#some arbitrary, time-consuming calculation on a number
m = n
for i in range(5000000):
m += i%25
if m > n*n:
m /= 2
return m
nums = [12,25,76,38,8,2,5]
finList = []
for i in nums:
return_val = calcNum(i)
finList.append(return_val)
print(finList)
现在,我想利用我的CPU中的多个核心,并给予他们每个人处理的数字之一的任务,而且由于“数字计算“功能是从头到尾自成一体的,我认为这将是相当简单的做法和多处理/线程的完美情况。
我的问题是,我应该使用哪一个(多处理或线程?),以及最简单的方法是什么?
我做了各种代码的测试我在其他问题来实现这一发现,而它运行正常它似乎并没有做任何实际的多线程/处理,只是只要需要我的第一个测试:
from multiprocessing.pool import ThreadPool
def calcNum(n):#some arbitrary, time-consuming calculation on a number
m = n
for i in range(5000000):
m += i%25
if m > n*n:
m /= 2
return m
pool = ThreadPool(processes=3)
nums = [12,25,76,38,8,2,5]
finList = []
for i in nums:
async_result = pool.apply_async(calcNum, (i,))
return_val = async_result.get()
finList.append(return_val)
print(finList)
谢谢!正是我在找什么。现在,如果我想将多个参数传递给池中的每个工作者(例如,如果calcNum(n)现在是calcNum(n,x,y)),我该如何去做这件事? – user3209118