Python
基本用法
列表与字典
选择与循环语句
函数与模块
中文转拼音
Excel操作
Panads
DOC操作
调用etcd模块
调用zookeeper模块
调用redis模块
pyinstaller打包
安装conda
使用conda打包32程序
python发送html邮件
HTTP请求
自建代理ip池
mysql操作
Python图片生成
HTML转图片
文件md5及base64
调用mongo
多进程与多线程
pyecharts绘图模块
多环境管理(Pyenv/Virtualenv)
PIP
本文档使用MrDoc发布
返回首页
-
+
多进程与多线程
2021年8月1日 09:27
admin
#对比 ####效率:多进程 < 普通 < 多线程 --- #多进程(multiprocessing) #导入模块 import multiprocessing as mp #定义调用函数 def job(a,d): print('aaaddd') #创建进程 p1 = mp.Process(target=job,args(1,2)) #启动进程 p1.start() #连接进程 p1.join() #多线程(threading) #导入模块 import threading as td #定义调用函数 def job(a,b): print("aaabbb") #创建线程 t1 = td.Thread(target=job,args=(1,2)) #启动线程 t1.start() #连接线程 t1.join() --- #队列(Queue) import multiprocessing as mp import threading as td def job(q): res=0 for i in range(1000): res+=i+i**2+i**3 q.put(res) #写入队列 if __name__=='__main__': q = mp.Queue() #创建多进程队列,多线程thread可放入process同样的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(res1+res2) --- #进程池(Pool) ####进程池就是我们将所要运行的东西,放到池子里,Python会自行解决多进程的问题 ####我们向池子里丢数据,池子就会返回函数返回的值。 Pool和之前的Process的不同点是丢向Pool的函数有返回值,而Process的没有返回值。 import multiprocessing as mp def job(x): return x*x def multicore(): pool = mp.Pool(processes=2) #调用CPU核数 res = pool.map(job, range(10)) #在map()中需要放入函数和需要迭代运算的值,然后它会自动分配给CPU核,返回结果 print(res) if __name__ == '__main__': multicore() ####运行结果: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
分享到: