1.定义多线程
import multiprocessing as mp
def job(q):
res = 0
for i in range(1000):
res += i+i**2+i**3
q.put(res) # queue入队
if __name__ == '__main__':
q = mp.Queue()#定义队列
p1 = mp.Process(target=job, args=(q,))#进程1
p2 = mp.Process(target=job, args=(q,))#进程2
p1.start()#开始
p2.start()
p1.join()#执行完了再执行p2
p2.join()#执行完了再执行后面的代码,有点同步异步的感觉
res1 = q.get()#出队
res2 = q.get()
print(res1+res2)
2.不同运算的时间结果
import multiprocessing as mp
import threading as td
import time
def job(q):
res = 0
for i in range(1000000):
res += i+i**2+i**3
q.put(res) # queue
def multicore():#多进程
q = mp.Queue()
p1 = mp.Process(target=job, args=(q,))
p2 = mp.Process(target=job, args=(q,))
p1.start()
p2.start()
p1.join()
p2.join()
res1 = q.get()
res2 = q.get()
print('multicore:' , res1+res2)
def normal():
res = 0
for _ in range(2):
for i in range(1000000):
res += i+i**2+i**3
print('normal:', res)
def multithread():#多线程
q = mp.Queue()
t1 = td.Thread(target=job, args=(q,))
t2 = td.Thread(target=job, args=(q,))
t1.start()
t2.start()
t1.join()
t2.join()
res1 = q.get()
res2 = q.get()
print('multithread:', res1+res2)
if __name__ == '__main__':
st = time.time()
normal()
st1= time.time()
print('normal time:', st1 - st)
multithread()
st2 = time.time()
print('multithread time:', st2 - st1)
multicore()
print('multicore time:', time.time()-st2)
3.进程池pool
import multiprocessing as mp
def job(x):
return x*x
def multicore():
pool = mp.Pool(processes=2)#定义核数
res = pool.map(job, range(10))#加入进程池
print(res)
res = pool.apply_async(job, (2,))#只能加入一个
print(res.get())
multi_res =[pool.apply_async(job, (i,)) for i in range(10)]#迭代加入多个进程
print([res.get() for res in multi_res])#取出
if __name__ == '__main__':
multicore()
4.lock用法
import multiprocessing as mp
import time
def job(v, num, l):
l.acquire()#锁住
for _ in range(10):
time.sleep(0.1)
v.value += num
print(v.value)
l.release()#释放
def multicore():
l = mp.Lock()#定义锁
v = mp.Value('i', 0)#共享内存,以免多个进程同时调用他
p1 = mp.Process(target=job, args=(v, 1, l))
p2 = mp.Process(target=job, args=(v, 3, l))
p1.start()
p2.start()#因为锁定了,所以在P1的时候运行完的,p2接着共享内存l继续运算,就不会出现岔开
p1.join()
p2.join()
if __name__ == '__main__':
multicore()
莫烦视频有个好的地方,是短,简单,对于初学者来说,只需要掌握这些基本的方法,慢慢就会变得熟练,本人初学