python基础知识(二十一)

8 篇文章 0 订阅
4 篇文章 0 订阅

进程的状态
在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
在这里插入图片描述
单进程

import time
def dance():
    for i in range(1,4):
        print("我在跳舞",i)
        time.sleep(2)
def sing():
    for i in range(1,4):
        print("我在唱歌",i)
        time.sleep(2)
if __name__ == '__main__':
    dance()
    sing()

结果为:
在这里插入图片描述
多进程(两个进程同时执行)

import time
from multiprocessing import Process     #导入进程的类
def dance():
    for i in range(1,4):
        print("我在跳舞",i)
        time.sleep(2)
def sing():
    for i in range(1,4):
        print("我在唱歌",i)
        time.sleep(2)
if __name__ == '__main__':
    p1=Process(target=dance)    #创建进程,target指向的值为函数
    p2=Process(target=sing)
    p1.start()                  #启动进程
    p2.start()

结果为:
在这里插入图片描述
父、子进程

import time,os
from multiprocessing import Process     #导入进程的类
xiaogou=10
def dance():
    global xiaogou
    xiaogou+=20
    print("dance小狗",xiaogou)
    for i in range(1,4):
        print("我在跳舞",i,"子进程",os.getpid(),"父进程",os.getppid())
        time.sleep(2)
def sing():
    global xiaogou
    xiaogou+=30
    print("sing小狗",xiaogou)
    for i in range(1,4):
        print("我在唱歌",i,"子进程",os.getpid(),"父进程",os.getppid())
        time.sleep(2)
if __name__ == '__main__':
    print("主进程",os.getpid())
    p1=Process(target=dance)    #创建进程,target指向的值为函数
    p2=Process(target=sing)
    p1.start()                  #启动进程
    p2.start()

结果为:
在这里插入图片描述
进程池

from multiprocessing import Pool
import os,time
def worker(name):
    start=time.time()
    print(name,"开始",start)
    time.sleep(2)
    end=time.time()
    print(name,"结束",end,"执行了",end-start)
if __name__ == '__main__':
    pool=Pool(3)
    for i in range(7):
        pool.apply(worker,args=(i+1,))       #把进程放到进程池
    pool.close()                              #关闭,不允许在有新的进程进来
    pool.join()                               #主进程阻塞,等待子进程结束
    print("进程结束")

结果为:
在这里插入图片描述
迅雷下载器

from multiprocessing import Pool
import os,time
def downLoad(movie):
    i = 0
    while i<5:
        print(movie,"下载了%.2f%%"%((i+1)/5*100))
        time.sleep(2)
        i=i+1
    return movie+"下载完成"
def downOver(contnet):
    print(contnet,"------")
if __name__ == '__main__':
    po=Pool(3)
    movieList=["西红柿首富","我不是药神","海绵宝宝","小猪佩奇","海王"]
    for name in movieList:       #启动进程downLoad,把电影名传入,下载完成后调用downOver函数,进行提示
        po.apply_async(downLoad,args=(name,),callback=downOver)
    po.close()
    po.join()

结果为:
在这里插入图片描述
在这里插入图片描述

from multiprocessing import Queue,Process
import os,time
def shengChanZhe(q):
    bzList=["小龙虾","韭菜鸡蛋","猪肉大葱","芹菜猪肉","三鲜","茴香"]
    for bz in bzList:
        print("包饺子",bz)
        q.put(bz)
        time.sleep(3)
def xiaoFeiZhe(q):
    while True:
        try:
            b=q.get(block=False,timeout=2)
            print("吃饺子",b)
            time.sleep(2)
        except:
            print("滚蛋,哥不吃了")
            break
if __name__ == '__main__':
    q=Queue(6)
    p1=Process(target=shengChanZhe,args=(q,))
    p2=Process(target=xiaoFeiZhe,args=(q,))
    p1.start()
    p2.start()

结果为:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值