进程池 回调函数 管道

---------------------------------------------------前进的道路都是由心来描绘的,所以,无论自己处于多么严酷的境遇之中,心头都不应为悲观的思想所萦绕..

# # ------------------------------------------------------------------------------------------------------------#

管道:
Pipe
Conn1,conn2 = Pipe()

数据共享:
M = Manager()
Dic = m.dict({‘name’:sbalex})
数据安全的问题
加锁

进程池 *****
Map:异步提交任务,参数是可迭代对象,自带close + join

Apply :同步提交任务,直接可以收到返回值

Apply_async() 异步提交任务:res.get() 阻塞效果
Close join
回调函数:callback= func [return [xxx]]



# --------------[管道]--------------
osError
esError
from multiprocessing import Pipe,Process

def func(conn1,):
msg = conn1.recv()
print('>>>>',msg)

if __name__ == '__main__':
conn1,conn2 = Pipe()

p=Process(target=func,args=(conn1,))
p.start()

conn2.close()
conn2.send('0J8K')

print('主进程结束')

# --------------[数据共享]--------------

from multiprocessing import Manager,Process,Lock

def func(dic):
l.acquire()
dic['n'] -= 1
l.release()

if __name__ == '__main__':
m = Manager()
l = Lock
dic = m.dict({'n':88})

p = Process(target=func, args=(dic,))

p_lst = []

for i in range(88):
p_lst.append(i)

[pp.join() for pp in p_lst]

p.start()

# --------------[进程池子]--------------
from multiprocessing import Pool, Process
import time


def func(i):
num = 0
for j in range(5):
num += i


if __name__ == '__main__':


p_list = []
start_time = time.time()
for i in range(100):
p = Process(target=func, args=(i,))
p_list.append(p)
p.start()
[pp.join() for pp in p_list]
end_time = time.time()
print(end_time - start_time)


s_time = time.time()
pool = Pool(4)
pool.map(func, range(100))
e_time = time.time()
x_time = e_time - s_time
print(x_time)

# --------------[进程同步的方法]--------------
from multiprocessing import Process,Pool
import time

def func():
num = 0
for i in range(5):
num+=i
time.sleep(1)
print(num)
return num
if __name__ == '__main__':
pool = Pool(4)

for i in range(10):
res = pool.apply(func,args=(i,))
#(apply同步串行)
print(res)

# --------------[进程异步的方法]--------------
from multiprocessing import Process, Pool
import time


def func():
num = 0
for i in range(5):
num += i
time.sleep(1)
print('>>>>', num)
return num


if __name__ == '__main__':
pool = Pool(4)

r_lst = []
for i in range(10):
res = pool.apply_async(func, args=(i,))
# (apply_async异步)
r_lst.append(res)
print(res.get())

pool.close() # 不是关闭 是锁定
pool.join()

for j in r_lst:
print(j.get())
原文地址:https://www.cnblogs.com/dealdwong2018/p/10038637.html