1、queue
import threading as td
import multiprocessing as mp
def job(q,a,b):
q.put(a**b)
if __name__ == "__main__":
q=mp.Queue()
t2=mp.Process(target=job,args=(q,3,3))
t1=mp.Process(target=job,args=(q,4,3))
t2.start()
t2.join()
t1.start()
t1.join()
res1=q.get()
res2=q.get()
print(res1)
print(res2)
2、进程池
import threading as td
import multiprocessing as mp
def job(x):
return x*x
def multicore():
pool=mp.Pool()
res=pool.map(job,range(100))
print(res)
if __name__ == "__main__":
multicore()
3、apply_async
import threading as td
import multiprocessing as mp
from time import *
def job(x):
return x*x
def multicore():
pool=mp.Pool(processes=3)
res=pool.map(job,range(4))
print(res)
res=pool.apply_async(job,(2,))
print(res)
multi_res=[pool.apply_async(job,(i,)) for i in range(12)]
print([resa.get() for resa in multi_res])
if __name__ == "__main__":
t1=time()
multicore()
t2=time()
print(t2-t1)
4、共享内存
import threading as td
import multiprocessing as mp
from time import *
def job(v,num,l):
l.acquire()
for _ in range(10):
sleep(0.2)
v.value+=num
print(v.value)
l.release()
# return x*x
def multicore():
i=mp.Lock()
v=mp.Value("i",0)
p1=mp.Process(target=job,args=(v,1,i))
p2=mp.Process(target=job,args=(v,3,i))
p1.start()
p2.start()
p1.join()
p2.join()
if __name__ == "__main__":
t1=time()
multicore()
t2=time()
print(t2-t1)