p = Pool(5) # 一般cpu个数+1
p.map(funcname,iterable) # 默认异步在,自带close和join,返回列表
p.apply() # 同步调用,不常用,有返回值
p.apply_async() # 异步调用,和主进程完全异步,需要手动close和join
##################################################
进程池和回调函数
from multiprocessing import Pool
import os
import time
# def func(n):
# print(n+1)
#
# if __name__ == ‘__main__‘:
# pool = Pool(5) # 一般cpu个数加1
# pool.map(func,range(100)) # 自带join和close,默认异步
def func1(n):
print(‘in func1‘,os.getpid())
return n*n
def func2(nn):
print(‘in func2‘,os.getpid())
print(nn)
if __name__ == ‘__main__‘:
print(‘主进程‘,os.getpid())
p = Pool(5)
p.apply_async(func1,args=(10,),callback=func2) # apply 同步,不常用 回调函数在主进程执行
p.close() # 结束进程池接受任务
p.join() # 感知进程池中的任务执行结束
#########################################################
进程池的返回值
import time
from multiprocessing import Pool
def func(i):
time.sleep(1)
return i*i
if __name__ == ‘__main__‘:
p = Pool(5)
res_1 = []
for i in range(10):
res = p.apply_async(func,args=(i,)) # apply不用get
res_1.append(res)
# print(res.get()) # 会在此处阻塞导致同步
for res in res_1:
print(res.get())
ret = p.map(func,range(10)) # 一次性返回所有值
print(ret)
##################################################
进程池实现TCP-Sever
import socket
from multiprocessing import Pool
def func(conn):
conn.send(b‘hello‘)
print(conn.recv(1024).decode(‘utf-8‘))
conn.close()
if __name__ == ‘__main__‘:
p = Pool(5)
sk = socket.socket()
sk.bind((‘127.0.0.1‘,8080))
sk.listen()
while True:
conn,addr = sk.accept()
p.apply_async(func,args=(conn,))
sk.close()
原文:https://www.cnblogs.com/farion/p/10017516.html