进程和线程 川长思鸟来 2021-10-30 05:08 425阅读 0赞 ***进程和线程*** ### 概念 进程就是操作系统中执行的一个程序,操作系统以进程为单位分配存储空间,每个进程都有自己的地址空间、 数据栈以及其他用于跟踪进程执行的辅助数据,操作系统管理所有进程的执行,为它们合理的分配资源。进程可以通 过fork或spawn的方式来创建新的进程来执行其他的任务,不过新的进程也有自己独立的内存空间,因此必须通过进程 间通信机制(IPC,Inter-Process Communication)来实现数据共享,具体的方式包括管道、信号、套接字、共享内存 区等。 Python既支持多进程又支持多线程,因此使用Python实现并发编程主要有3种方式:多进程、多线程、多进程+多线程。 ***Python中的多进程*** Unix和Linux操作系统上提供了`fork()`系统调用来创建进程,调用`fork()`函数的是父进程,创建出的是子进程,子进程 是父进程的一个拷贝,但是子进程拥有自己的PID。`fork()`函数非常特殊它会返回两次,父进程中可以通过`fork()`函数 的返回值得到子进程的PID,而子进程中的返回值永远都是0。Python的os模块提供了`fork()`函数。由于Windows系统 没有`fork()`调用,因此要实现跨平台的多进程编程,可以使用multiprocessing模块的`Process`类来创建子进程,而且 该模块还提供了更高级的封装,例如批量启动进程的进程池(`Pool`)、用于进程间通信的队列(`Queue`)和管道 (`Pipe`)等。 from random import randint from time import time, sleep def download_task(filename): print('开始下载%s...' % filename) time_to_download = randint(5, 10) sleep(time_to_download) print('%s下载完成! 耗费了%d秒' % (filename, time_to_download)) def main(): start = time() download_task('Python从入门到住院.pdf') download_task('Peking Hot.avi') end = time() print('总共耗费了%.2f秒.' % (end - start)) if __name__ == '__main__': main() ------------------------------------------------------------------------------------ from multiprocessing import Process from os import getpid from random import randint from time import time, sleep def download_task(filename): print('启动下载进程,进程号[%d].' % getpid()) print('开始下载%s...' % filename) time_to_download = randint(5, 10) sleep(time_to_download) print('%s下载完成! 耗费了%d秒' % (filename, time_to_download)) def main(): start = time() p1 = Process(target=download_task, args=('Python从入门到住院.pdf', )) p1.start() p2 = Process(target=download_task, args=('Peking Hot.avi', )) p2.start() p1.join() p2.join() end = time() print('总共耗费了%.2f秒.' % (end - start)) if __name__ == '__main__': main() 在上面的代码中,我们通过`Process`类创建了进程对象,通过`target`参数我们 传入一个函数来表示进程启动后要执行的代码,后面的`args`是一个元组,它代表了传递 给函数的参数。`Process`对象的`start`方法用来启动进程,而`join`方法表示等待 进程执行结束。运行上面的代码可以明显发现两个下载任务“同时”启动了,而且程序的执 行时间将大大缩短。 在Python早期的版本中就引入了thread模块(现在名为\_thread)来实现多线程编程,然而该模块过于底层,而且很多功能都没有提供,因此目前的多线程开发我们推荐使用threading模块,该模块对多线程编程提供了更好的面向对象的封装 from random import randint from threading import Thread from time import time, sleep def download(filename): print('开始下载%s...' % filename) time_to_download = randint(5, 10) sleep(time_to_download) print('%s下载完成! 耗费了%d秒' % (filename, time_to_download)) def main(): start = time() t1 = Thread(target=download, args=('Python从入门到住院.pdf',)) t1.start() t2 = Thread(target=download, args=('Peking Hot.avi',)) t2.start() t1.join() t2.join() end = time() print('总共耗费了%.3f秒' % (end - start)) if __name__ == '__main__': main() 我们可以直接使用threading模块的`Thread`类来创建线程,但是我们之前讲过一个非常重要的概念叫“继承”,我们可以从已有的类创建新类,因此也可以通过继承`Thread`类的方式来创建自定义的线程类,然后再创建线程对象并启动线程。代码如下所示 from random import randint from threading import Thread from time import time, sleep class DownloadTask(Thread): def __init__(self, filename): super().__init__() self._filename = filename def run(self): print('开始下载%s...' % self._filename) time_to_download = randint(5, 10) sleep(time_to_download) print('%s下载完成! 耗费了%d秒' % (self._filename, time_to_download)) def main(): start = time() t1 = DownloadTask('Python从入门到住院.pdf') t1.start() t2 = DownloadTask('Peking Hot.avi') t2.start() t1.join() t2.join() end = time() print('总共耗费了%.2f秒.' % (end - start)) if __name__ == '__main__': main()
相关 线程和进程 目录 进程 线程 实现多线程的方法 方式一:继承Thread类 设置和获取线程名称 线程调度 线程控制 线程的状态(生命周期) 方式二:实现Runnab 曾经终败给现在/ 2024年04月01日 01:38/ 0 赞/ 79 阅读
相关 线程和进程 一、概念: 进程:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行的程序的实例,包括程序计数器、寄存器和程序变量的当前值。 线程:进程 刺骨的言语ヽ痛彻心扉/ 2024年03月27日 11:50/ 0 赞/ 79 阅读
相关 线程和进程 目录 一、线程和进程的区别 二、线程 三、分时操作系统 四、如何减少上下文切换 五、多线程和单线程 六、多线程的使用场景 -------------------- 亦凉/ 2023年10月01日 21:23/ 0 赞/ 22 阅读
相关 线程和进程 线程和进程 一、线程和进程 线程是CPU调度和分派的基本单位。 进程对于操作系统来说就是一个任务。 听起来挺难懂的一句话,我们举一个实际例子:比如现在有一条需要 迈不过友情╰/ 2023年05月29日 14:29/ 0 赞/ 26 阅读
相关 进程和线程 java_Java学习笔记:进程和线程 进程 进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 线程 线程:是进程中的单个顺序控制流,是一条执行路径 单 我会带着你远行/ 2022年11月06日 00:55/ 0 赞/ 63 阅读
相关 进程和线程 1.概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位 我就是我/ 2022年07月16日 08:11/ 0 赞/ 258 阅读
相关 进程和线程 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。 线程:是进程的一个执行单元,是进程内调度实体。比进程更小的独立运行 ╰半夏微凉°/ 2022年02月19日 21:13/ 0 赞/ 347 阅读
相关 进程和线程 进程和线程 开发工具与关键技术:java 撰写时间:2019/5/15 进程和线程 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间 ╰半夏微凉°/ 2022年01月31日 06:47/ 0 赞/ 278 阅读
相关 进程和线程 进程和线程 概念 进程就是操作系统中执行的一个程序,操作系统以进程为单位分配存储空间,每个进程都有自己的地址空间、 数据栈以及其他用于跟踪进程执行的 川长思鸟来/ 2021年10月30日 05:08/ 0 赞/ 426 阅读
相关 线程和进程 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它 红太狼/ 2021年06月24日 14:36/ 0 赞/ 539 阅读
还没有评论,来说两句吧...