iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python 并发编程-进程
  • 625
分享到

Python 并发编程-进程

进程Python 2023-01-30 22:01:32 625人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

Process类参数介绍 group  --------  参数未使用, 值始终为None target  --------  表示调用对象, 即子进程要执行的任务 args  ----------  表示调用对象的位置参数元组, arg

Process类参数介绍

group  --------  参数未使用, 值始终为None

target  --------  表示调用对象, 即子进程要执行的任务

args  ----------  表示调用对象的位置参数元组, args=(1,2,'hades',) 是一个元组形式,必须有逗号

kwargs  -------  表示调用对象的字典, kwargs={'name':'hades','age':18}

name  ---------  为子进程的名称

 

Process类方法介绍

p.start()  -----------------  启动进程, 并调用该子进程中的p.run()

p.run()  -------------------  进程启动时运行的方法, 正是它去调用target指定的函数, 自定义类的类中一定要实现该方法

p.terminate()  -----------  强制终止进程p, 不会进行任何清理操作, 如果p创建了子进程, 该子进程就成了僵尸进程, 使用该方法需要特别小心这种情况.

             如果p还保存了一个那么也将不会被释放, 进而导致死锁

p.is_alive()  --------------  判断进程是否存活, 如果p仍然运行, 返回True

p.join()  -------------------  主进程等待p子进程终止(是主进程处于等的状态,而p子进程处于运行的状态), 只能join住start开启的进程, 不能join住run开启的进程

 

Process类属性介绍

p.daemon  ---------------  默认值为False,如果设为True, 代表p为后台运行的守护进程, 当p的父进程终止时, p也随之终止, 并且设定为True后, p不能创建自己的新进程,必须在p.start()之前设置

p.name  ------------------  进程的名称

p.pid  ---------------------  进程的pid

p.exitcode  --------------  进程在运行时为None, 如果为-N, 表示被信号N结束了(了解知识点)

p.authkey  ---------------  进程的身份验证键,默认是由os.urandom()随机生成的32字符的字符串.

            这个键的用途是为涉及网络连接的底层进程间通信提供安全性,这类连接只有在具有相同的身份验证键时才能成功(了解知识点)          

 

 

什么是进程

使用进程是要实现并发效果

 

进程就是一个正在进行/运行的程序, 换言之, 进程指的是一个程序的运行过程

程序vs进程:

  程序: 只是一堆代码文件

  进程: 程序运行的过程才是进程

 

串行: 一个任务完完整整地运行完毕, 再执行下一个任务, 按次序依次进行

判断串行的概念:

  串行看起来就是一个一个运行的: 对

  一个一个的运行就是串行: 错误

 

并发(切换+保存状态):  多个任务看起来是同时运行, 单核就可以实行并发

并行:  多个任务是真正意义上的同时运行, 只有多核才能实现并行

 

多道技术的产生背景:  就是想要在单核下实现并发

如何实现:

  1. 空间上的复用: 将内存分为几部分, 每个部分放入一个程序的数据, 这样同一时间内存中就有了多道程序的数据, 为CPU在多个任务间切换做准备

  2. 时间上的复用: 多个进程共享CPU的时间

    关键点就是CPU在多个任务之间进行切换

    有两种情况下会发生切换:

      1. 一个任务占用CPU时间过长(没有遇到io操作): 会降低效率

      2. 一个任务在运行的过程中遇到IO操作: 可以提升效率

 

开启子进程的方式1

 1 from multiprocessing import Process
 2 import time
 3 
 4 
 5 def task(name):
 6     print('%s is running' % name)
 7     time.sleep(3)
 8     print('%s is done' % name)
 9 
10 
11 # 在windows系统上开启子进程的操作必须放到该行代码下
12 if __name__ == '__main__':
13     p = Process(target=task, args=('子进程',))  # Process(target=task,kwargs={'name':'子进程'}) #
14     p.start()  # 仅仅只是向操作系统发送一个创造子进程的信号
15     print('主')

 终端打印:

 

 

开启子进程的方式2

 1 from multiprocessing import Process
 2 import time
 3 
 4 
 5 class Myprocess(Process):
 6     def __init__(self, name):
 7         super().__init__()
 8         self.name = name
 9 
10     def run(self):
11         print('%s is running' % self.name)
12         time.sleep(3)
13         print('%s is done' % self.name)
14 
15 
16 # 在windows系统上开启子进程的操作必须放到该行代码下
17 if __name__ == '__main__':
18     p = Myprocess('子进程')
19     p.start()  # 仅仅只是向操作系统发送一个创造子进程的信号
20     p.join()
21     print('主')

终端打印:

 

 join方法

 1 from multiprocessing import Process
 2 import time
 3 
 4 
 5 def task(name, n):
 6     print('%s is running' % name)
 7     time.sleep(n)
 8     print('%s is done' % name)
 9 
10 
11 if __name__ == '__main__':
12     start = time.time()
13     p_l = []
14     for i in range(1, 4):
15         p = Process(target=task, args=('子进程%s' % i, i))
16         p_l.append(p)
17         p.start()
18 
19     for p in p_l:
20         p.join()
21     stop = time.time()
22     print('主', (stop - start))

 终端打印:

 

 进程之间内存隔离

 1 from multiprocessing import Process
 2 
 3 n = 100
 4 
 5 
 6 def task():
 7     global n
 8     n = 0
 9 
10 
11 if __name__ == '__main__':
12     p = Process(target=task, )
13     p.start()
14     p.join()
15     print('主', n)

 终端打印:

 

 进程的PID

 1 from multiprocessing import Process, current_process
 2 import time, os
 3 
 4 
 5 def task():
 6     print('子进程[%s]  父进程<%s>' % (os.getpid(), os.getppid()))
 7     time.sleep(300)
 8 
 9 
10 if __name__ == '__main__':
11     p = Process(target=task)
12     p.start()
13     print('主', os.getpid(), os.getppid())
14     time.sleep(1000)

终端打印:

 

 

 进程对象其他相关的属性或方法

 p.name 更改子进程的名字

 1 from multiprocessing import Process
 2 import time, os
 3 
 4 
 5 def task():
 6     print('%s is running' % os.getppid())
 7     time.sleep(300)
 8 
 9 
10 if __name__ == '__main__':
11     p = Process(target=task, name='子进程1')
12     p.start()
13     print(p.name)
14     print('主')
15     time.sleep(1000)

 终端打印:

 

terminate与is_alive

  p.terminate()  关闭进程

  p.is_alive()  查看进程是否存活

 1 from multiprocessing import Process
 2 import time, os
 3 
 4 
 5 def task():
 6     print('%s is running' % os.getppid())
 7     time.sleep(300)
 8 
 9 
10 if __name__ == '__main__':
11     p = Process(target=task, name='子进程1')
12     p.start()
13     p.terminate()
14     time.sleep(0.1)
15     print(p.is_alive())
16     print('主')

 终端打印:

 

--结束END--

本文标题: Python 并发编程-进程

本文链接: https://www.lsjlt.com/news/179447.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 并发编程-进程
    Process类参数介绍 group  --------  参数未使用, 值始终为None target  --------  表示调用对象, 即子进程要执行的任务 args  ----------  表示调用对象的位置参数元组, arg...
    99+
    2023-01-30
    进程 Python
  • python并发编程之多进程
    阅读目录 一 multiprocessing模块介绍 二 Process类的介绍 三 Process类的使用 四 守护进程 一  multiprocessing模块介绍  python中的多线程无法利用多核优势,如果想...
    99+
    2023-01-30
    之多 进程 python
  • Python并发编程之线程池/进程池
    原文来自开源中国前言python标准库提供线程和多处理模块来编写相应的多线程/多进程代码,但当项目达到一定规模时,频繁地创建/销毁进程或线程是非常消耗资源的,此时我们必须编写自己的线程池/进程池来交换时间空间。但是从Python3.2开始,...
    99+
    2023-06-02
  • python并发编程
    python并发编程的思维导图,原始文件请转到:processon链接查看 IO模型 阻塞IO 非阻塞IO IO多路复用 事件驱动IO 异步IO ...
    99+
    2023-01-31
    python
  • Python 并发编程:PoolExec
    个人笔记,如有疏漏,还请指正。 使用多线程(threading)和多进程(multiprocessing)完成常规的并发需求,在启动的时候 start、join 等步骤不能省,复杂的需要还要用 1-2 个队列。 随着需求越来越复杂,如...
    99+
    2023-01-30
    Python PoolExec
  • python并发编程之多线程编程
    一、threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 二、开启线程的两种方式 方式一: from threading import ...
    99+
    2023-01-31
    之多 线程 python
  • Python并发编程之协程
    协程介绍 协程:是单线程下的并发,又称微线程,纤程。协程是一种用户态的轻量级线程,即线程是由用户程序自己控制调度的。 需要强调的是: #1. python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫...
    99+
    2023-01-30
    Python
  • 七、并发编程(进程与线程)
    一、前言 进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。    PS:即使可...
    99+
    2023-01-30
    线程 进程
  • Python多进程并发(multipro
     A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Con...
    99+
    2023-01-31
    进程 Python multipro
  • Python中编写并发程序
    GIL 在Python中,由于历史原因(GIL),使得Python中多线程的效果非常不理想.GIL使得任何时刻Python只能利用一个CPU核,并且它的调度算法简单粗暴:多线程中,让每个线程运行一段时间t,然后强行挂起该线程,继而去运行其...
    99+
    2023-01-31
    程序 Python
  • 第36天并发编程之进程篇
    目录:   1. 基础概念   2. 创建进程和结束进程   3. 进程之间内存空间物理隔离   4. 进程的属性方法   5. 守护进程   6. 互斥锁   7. IPC通信机制   8. 生产者消费者模型 一. 基础概念 1. 什...
    99+
    2023-01-30
    进程
  • Python全栈开发之并发编程
    No.1 线程 什么是多任务 就是操作系统可以同时运行多个任务,就是可以一边用浏览器上网,同时又可以听歌,还能再撩个×××姐,这就是多任务,操作系统会轮流把系统调度到每个核心上去执行 并发和并行 并发是指任务数多余cpu核数,通过操作系统的...
    99+
    2023-01-31
    Python
  • python并发编程之多进程、多线程、异步和协程详解
    最近学习python并发,于是对多进程、多线程、异步和协程做了个总结。 一、多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。即使是单CPU的计...
    99+
    2022-06-04
    之多 多线程 详解
  • Python高级编程和异步IO并发编程
    Python高级编程和异步IO并发编程网盘地址:https://pan.baidu.com/s/1eB-BsUacBRhKxh7qXwndMQ 密码: tgba备用地址(腾讯微云):https://share.weiyun.com/5Z3x...
    99+
    2023-01-31
    高级编程 Python IO
  • 关于python并发编程中的协程
    目录什么是协程协程和线程协程的应用演示Demo什么是协程 协程(Coroutine)是一种比线程更加轻量级的并发方式,它不需要线程上下文切换的开销,可以在单线程中实现并发。协程通常具...
    99+
    2023-05-17
    python 并发编程 python 协程
  • Python并发编程:如何应对Apache高并发?
    Apache作为一款世界知名的Web服务器,因其稳定性、安全性、可靠性等特点,在众多Web开发中得到广泛应用。然而,随着互联网的快速发展,用户对Web应用的访问量越来越大,Apache面临着越来越大的高并发压力。如何通过Python并发编...
    99+
    2023-11-13
    并发 apache 关键字
  • python基础之并发编程(一)
    目录一、进程(Process)二、线程(Thread)三、并发编程解决方案:四、多线程实现 (两种)1、第一种 函数方法2、第二种 类方法包装五、守护线程与子线程1、线程在分法有:2...
    99+
    2022-11-12
  • python基础之并发编程(二)
    目录一、多进程的实现方法一方法二:二、使用进程的优缺点1、优点2、缺点三、进程的通信1、Queue 实现进程间通信2、Pipe 实现进程间通信(一边发送send(obj),一边接收(...
    99+
    2022-11-12
  • python基础之并发编程(三)
    目录一、协程定义和作用1、使用协程的优点2、使用协程的缺点二、Greenlet 的使用三、Gevent的使用四、async io 异步 IO1、asyncio中的task的使用五、总...
    99+
    2022-11-12
  • Python并发编程之IO模型
    五种IO模型 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞 同步(synchronous) IO异步(asynchronous) IO阻塞(blocking)...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作