前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python进阶】第4篇:Python进程使用详解(图文演示) 。近200页md文档14大体系

【Python进阶】第4篇:Python进程使用详解(图文演示) 。近200页md文档14大体系

原创
作者头像
程序员一诺
发布2023-11-22 21:35:18
1960
发布2023-11-22 21:35:18
举报
文章被收录于专栏:知识集合知识集合
本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。

Python全套笔记直接地址: 请移步这里


共 14 章,157 子模块


进程

学习目标

  • 能够知道进程的作用

1. 进程的介绍

在Python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式。

2. 进程的概念

一个正在运行的程序或者软件就是一个进程,它是操作系统进行资源分配的基本单位,也就是说每启动一个进程,操作系统都会给其分配一定的运行资源(内存资源)保证进程的运行。

比如:现实生活中的公司可以理解成是一个进程,公司提供办公资源(电脑、办公桌椅等),真正干活的是员工,员工可以理解成线程。

注意:

一个程序运行后至少有一个进程,一个进程默认有一个线程,进程里面可以创建多个线程,线程是依附在进程里面的,没有进程就没有线程

3. 进程的作用

单进程效果图:

进程
进程

多进程效果图:

进程
进程

说明:

多进程可以完成多任务,每个进程就好比一家独立的公司,每个公司都各自在运营,每个进程也各自在运行,执行各自的任务。

4. 小结

  • 进程是操作系统进行资源分配的基本单位。
  • 进程是Python程序中实现多任务的一种方式

多进程的使用

学习目标

  • 能够使用多进程完成多任务

1 导入进程包

代码语言:javascript
复制
#导入进程包
  
  
import multiprocessing

2. Process进程类的说明

Process([group [, target [, name [, args [, kwargs]]]]])

  • group:指定进程组,目前只能使用None
  • target:执行的目标任务名
  • name:进程名字
  • args:以元组方式给执行任务传参
  • kwargs:以字典方式给执行任务传参

Process创建的实例对象的常用方法:

  • start():启动子进程实例(创建子进程)
  • join():等待子进程执行结束
  • terminate():不管任务是否完成,立即终止子进程

Process创建的实例对象的常用属性:

name:当前进程的别名,默认为Process-N,N为从1开始递增的整数

3. 多进程完成多任务的代码

代码语言:javascript
复制
import multiprocessing
import time
?
?
  
  
# 跳舞任务
  
  
def dance():
    for i in range(5):
        print("跳舞中...")
        time.sleep(0.2)
?
?
  
  
# 唱歌任务
  
  
def sing():
    for i in range(5):
        print("唱歌中...")
        time.sleep(0.2)
?
if __name__ == '__main__':
    # 创建跳舞的子进程
    # group: 表示进程组,目前只能使用None
    # target: 表示执行的目标任务名(函数名、方法名)
    # name: 进程名称, 默认是Process-1, .....
    dance_process = multiprocessing.Process(target=dance, name="myprocess1")
    sing_process = multiprocessing.Process(target=sing)
?
    # 启动子进程执行对应的任务
    dance_process.start()
    sing_process.start()

执行结果:

代码语言:javascript
复制
唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...

4. 小结

  1. 导入进程包
    • import multiprocessing
  2. 创建子进程并指定执行的任务
    • sub_process = multiprocessing.Process (target=任务名)
  3. 启动进程执行任务
    • sub_process.start()

进程编号

学习目标

  • 能够知道如果进程编号

1. 进程编号的目的

进程编号的目的是验证主进程和子进程的关系,可以得知子进程是由那个主进程创建出来的。

进程编号的两种操作

  • 当前进程编号
  • 当前父进程编号

2. 当前进程编号

os.getpid() 表示当前进程编号

示例代码:

代码语言:javascript
复制
import multiprocessing
import time
import os
?
?
  
  
# 跳舞任务
  
  
def dance():
    # 当前进程的编号
    print("dance:", os.getpid())
    # 当前进程
    print("dance:", multiprocessing.current_process())
    for i in range(5):
        print("跳舞中...")
        time.sleep(0.2)
        # 扩展:根据进程编号杀死指定进程
        os.kill(os.getpid(), 9)
?
?
  
  
# 唱歌任务
  
  
def sing():
    # 当前进程的编号
    print("sing:", os.getpid())
    # 当前进程
    print("sing:", multiprocessing.current_process())
    for i in range(5):
        print("唱歌中...")
        time.sleep(0.2)
?
?
if __name__ == '__main__':
?
    # 当前进程的编号
    print("main:", os.getpid())
    # 当前进程
    print("main:", multiprocessing.current_process())
    # 创建跳舞的子进程
    # group: 表示进程组,目前只能使用None
    # target: 表示执行的目标任务名(函数名、方法名)
    # name: 进程名称, 默认是Process-1, .....
    dance_process = multiprocessing.Process(target=dance, name="myprocess1")
    sing_process = multiprocessing.Process(target=sing)
?
    # 启动子进程执行对应的任务
    dance_process.start()
    sing_process.start()

执行结果:

代码语言:javascript
复制
main: 70763
main: <_MainProcess(MainProcess, started)>
dance: 70768
dance: <Process(myprocess1, started)>
跳舞中...
sing: 70769
sing: <Process(Process-2, started)>
唱歌中...
唱歌中...
唱歌中...
唱歌中...
唱歌中...

3. 当前父进程编号

os.getppid() 表示当前父进程编号

示例代码:

代码语言:javascript
复制
import multiprocessing
import time
import os
?
?
  
  
# 跳舞任务
  
  
def dance():
    # 当前进程的编号
    print("dance:", os.getpid())
    # 当前进程
    print("dance:", multiprocessing.current_process())
    # 父进程的编号
    print("dance的父进程编号:", os.getppid())
    for i in range(5):
        print("跳舞中...")
        time.sleep(0.2)
        # 扩展:根据进程编号杀死指定进程
        os.kill(os.getpid(), 9)
?
?
  
  
# 唱歌任务
  
  
def sing():
    # 当前进程的编号
    print("sing:", os.getpid())
    # 当前进程
    print("sing:", multiprocessing.current_process())
    # 父进程的编号
    print("sing的父进程编号:", os.getppid())
    for i in range(5):
        print("唱歌中...")
        time.sleep(0.2)
?
?
if __name__ == '__main__':
?
    # 当前进程的编号
    print("main:", os.getpid())
    # 当前进程
    print("main:", multiprocessing.current_process())
    # 创建跳舞的子进程
    # group: 表示进程组,目前只能使用None
    # target: 表示执行的目标任务名(函数名、方法名)
    # name: 进程名称, 默认是Process-1, .....
    dance_process = multiprocessing.Process(target=dance, name="myprocess1")
    sing_process = multiprocessing.Process(target=sing)
?
    # 启动子进程执行对应的任务
    dance_process.start()
    sing_process.start()
代码语言:javascript
复制
main: 70860
main: <_MainProcess(MainProcess, started)>
dance: 70861
dance: <Process(myprocess1, started)>
dance的父进程编号: 70860
跳舞中...
sing: 70862
sing: <Process(Process-2, started)>
sing的父进程编号: 70860
唱歌中...
唱歌中...
唱歌中...
唱歌中...
唱歌中...

4. 小结

  • 当前进程编号
    • os.getpid()
  • 当前父进程编号
    • os.getppid()
  • 进程编号可以查看父子进程的关系

进程执行带有参数的任务

学习目标

  • 能够写出进程执行带有参数的任务

1. 进程执行带有参数的任务的介绍

前面我们使用进程执行的任务是没有参数的,假如我们使用进程执行的任务带有参数,如何给函数传参呢?

Process类执行任务并给任务传参数有两种方式:

  • args 表示以元组的方式给执行任务传参
  • kwargs 表示以字典方式给执行任务传参

2. args参数的使用

示例代码:

代码语言:javascript
复制
import multiprocessing
import time
?
?
  
  
# 带有参数的任务
  
  
def task(count):
    for i in range(count):
        print("任务执行中..")
        time.sleep(0.2)
    else:
        print("任务执行完成")
?
?
if __name__ == '__main__':
    # 创建子进程
    # args: 以元组的方式给任务传入参数
    sub_process = multiprocessing.Process(target=task, args=(5,))
    sub_process.start()

执行结果:

代码语言:javascript
复制
任务执行中..
任务执行中..
任务执行中..
任务执行中..
任务执行中..
任务执行完成

3. kwargs参数的使用

示例代码:

代码语言:javascript
复制
import multiprocessing
import time
?
?
  
  
# 带有参数的任务
  
  
def task(count):
    for i in range(count):
        print("任务执行中..")
        time.sleep(0.2)
    else:
        print("任务执行完成")
?
?
if __name__ == '__main__':
    # 创建子进程
?
    # kwargs: 表示以字典方式传入参数
    sub_process = multiprocessing.Process(target=task, kwargs={"count": 3})
    sub_process.start()

执行结果:

代码语言:javascript
复制
任务执行中..
任务执行中..
任务执行中..
任务执行完成

4. 小结

  • 进程执行任务并传参有两种方式:
    • 元组方式传参(args): 元组方式传参一定要和参数的顺序保持一致。
    • 字典方式传参(kwargs): 字典方式传参字典中的key一定要和参数名保持一致。

未完待续 下一期下一章

全套笔记直接地址: 请移步这里

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • Python全套笔记直接地址: 请移步这里
    • 共 14 章,157 子模块
      • 1. 进程的介绍
      • 2. 进程的概念
      • 3. 进程的作用
      • 4. 小结
      • 1 导入进程包
      • 2. Process进程类的说明
      • 3. 多进程完成多任务的代码
      • 4. 小结
      • 1. 进程编号的目的
      • 2. 当前进程编号
      • 3. 当前父进程编号
      • 4. 小结
      • 1. 进程执行带有参数的任务的介绍
      • 2. args参数的使用
      • 3. kwargs参数的使用
      • 4. 小结
  • 进程
  • 多进程的使用
  • 进程编号
  • 进程执行带有参数的任务
    • 未完待续 下一期下一章
    • 全套笔记直接地址: 请移步这里
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com