IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python基础学习-Multiprocessing -> 正文阅读

[Python知识库]python基础学习-Multiprocessing

目录

一、什么是多进程

二、创建进程

三、queue进程输出

四、效率对比 multithreading,multiprocessing

五、进程池 pool

六、共享内存 shared memory

七、lock 锁

额外补充,pickle 存放数据


一、什么是多进程

多核运算介绍:计算机多个核同时处理多个线程。

二、创建进程

代码如下,

import multiprocessing as mp
#import threading as td

def job(a,d):
    print('aaa')

if __name__=='__main__':

    #t1=td.Thread(target=job,args=(1,2))
    p1=mp.Process(target=job,args=(1,2))
    #t1.start()
    p1.start()
    #t1,join()
    p1.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)#queue

if __name__=='__main__':#要在这个框架完成
    q=mp.Queue()
    p1=mp.Process(target=job,args=(q,))#q后面的“,”不能省略,表示它可以叠代
    p2=mp.Process(target=job,args=(q,))
    p1.start()
    p2.start()
    p1.join()#jion阻塞队列,全部运行完成后退出
    p2.join()
    res1=q.get()
    res2=q.get()
    print(res1+res2)

输出结果

========================= RESTART: D:\Python exercise\test905.py ========================
499667166000

四、效率对比 multithreading,multiprocessing

代码如下,

import multiprocessing as mp
import threading as td
import time

def job(q):
    res=0
    for i in range(10000000):
        res+=i+i**2+i**3
    q.put(res)#queue

def multicore():
    q=mp.Queue()
    p1=mp.Process(target=job,args=(q,))#q后面的“,”不能省略,表示它可以叠代
    p2=mp.Process(target=job,args=(q,))
    p1.start()
    p2.start()
    p1.join()#jion阻塞队列,全部运行完成后退出
    p2.join()
    res1=q.get()
    res2=q.get()
    print(res1+res2)

def normal():
    res=0
    for _ in range(2):
        for i in range(10000000):
            res+=i+i**2+i**3
    print('narmal:',res)

def multithread():
    q=mp.Queue()
    t1=td.Thread(target=job,args=(q,))#q后面的“,”不能省略,表示它可以叠代
    t2=td.Thread(target=job,args=(q,))
    t1.start()
    t2.start()
    t1.join()#jion阻塞队列,全部运行完成后退出
    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)

运行结果,multiprocessing>multicore>normal,range()里面的数越大,结果明显

========================= RESTART: D:\Python exercise\test905.py ========================
narmal: 4999999666666716666660000000
normal time: 9.571225881576538
multithread: 4999999666666716666660000000
multithread time: 9.488673448562622
4999999666666716666660000000
multicore time: 5.556674957275391

五、进程池 pool

把所有要运行的程序放到一个池子里,python帮助怎么分配这些进程和运行的结果。

代码如下,

import multiprocessing as mp

def job(x):
    return x*x

def multicore():
    pool=mp.Pool()#注意Pool中的P要大写
    res=pool.map(job,range(10))#注意这一行里面是map
    print(res)
   
if __name__=='__main__':
    multicore()

?运行结果,

========================= RESTART: D:\Python exercise\test905.py ========================
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

?其他不同的程序写法

import multiprocessing as mp

def job(x):
    return x*x

def multicore():
    pool=mp.Pool(processes=3)#注意processes=3,表示用到三个核,默认的值是全部的核
    res=pool.map(job,range(10))#注意这一行里面是map
    print(res)
    res=pool.apply_async(job,(2,))#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()

运行结果,

========================= RESTART: D:\Python exercise\test905.py ========================
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
4
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

六、共享内存 shared memory

import multiprocessing as mp

value=mp.Value('d',1)#注意i-整数,d-小数,再传入一个数值
array=mp.Array('i',[1,2,3])#注意array是一维的,是一条数据线

具体的应用后续补充

七、lock 锁

?md,这破程序为啥运行了没啥反应呢!!!!

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))#q后面的“,”不能省略,表示它可以叠代
    p2=mp.Process(target=job,args=(v,3,l))
    p1.start()
    p2.start()
    p1.join()#jion阻塞队列,全部运行完成后退出
    p2.join()

if __name__=='__main__':#要在这个框架完成
    multicore()

额外补充,pickle 存放数据

代码如下,

import pickle

a_dict={'da':111,2:[23,1,4],'24':{1:2,'d':'sad'}}

##file=open('pickle_example.pickle','wb')
##pickle.dump(a_dict,file)
##file.close()

##file=open('pickle_example.pickle','rb')
##a_dict1=pickle.load(file)
##file.close()
##print(a_dict1)

with open('pickle_example.pickle','rb')as file:
   a_dict1=pickle.load(file)
print(a_dict1)

运行结果,

========================= RESTART: D:\Python exercise\test905.py ========================
{'da': 111, 2: [23, 1, 4], '24': {1: 2, 'd': 'sad'}}
>>> 
========================= RESTART: D:\Python exercise\test905.py ========================
{'da': 111, 2: [23, 1, 4], '24': {1: 2, 'd': 'sad'}}
>>> 

至此,已经讲完了多进程。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 23:57:30  更:2021-09-10 23:57:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:04:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码