cpu有多个核心,在默认的程序运行中只使用了一个核心,其它的核心处于闲置状态。
可以使用mulltiprocessing模块以多进程处理程序。
通常有两种方式:
#使用进程池pool
import multiprocessing as mp
def multicpu():
print(mp.cpu_count())
pool = mp.Pool()
re = pool.map(job, [10000,10,1])
print(re)
def job(x):
y=0
for i in range(x):
for j in range(x):
y=y+x
return y
if __name__ == '__main__':
multicpu()
import multiprocessing
import time
def func(msg1, msg2):
print("msg1:", msg1, "msg2:", msg2)
time.sleep(2)
print("end")
if __name__ == "__main__":
pool = multiprocessing.Pool(2)
msgs = [(1,1),(2,2)]
pool.starmap(func, msgs)
print("Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~")
pool.close()
pool.join()
print("Sub-process(es) done.")
# 输出
# msg1: 1 msg2: 1
# msg1: 2 msg2: 2
# end
# end
# Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~
# Sub-process(es) done.
mp.cpu_count():获取cpu可用核心个数
job是需要多进程处理的函数;multicpu执行多进程处理;pool是一个任务池,输入参数空默认使用cpu的所有核心,输入参数为某一数字确定使用核心个数。
map函数执行进程池任务,参数一为待执行job函数,参数二为可迭代输入参数序列。
最后返回[1000000, 1000, 1];
import multiprocessing as mp
def job(q,x):
y=0
for i in range(x):
for j in range(x):
y=y+x
q.put(y)
if __name__ == '__main__':
q = mp.Queue()
p1 = mp.Process(target=job, args=(q,10))
p2 = mp.Process(target=job, args=(q,100))
p1.start()
p2.start()
p1.join()
p2.join()
res1 = q.get()
res2 = q.get()
print(res1)
print(res2)
print(res1 + res2)
Queue存储进程输出,Prrocess建立进程,target为目标函数,args为输入参数;start(),开始进程;join()执行进程;
结果为1000
1000000
1001000