Python的多线程多进程是什么

发布时间:2021-07-13 15:41:15 作者:chen
来源:亿速云 阅读:178

这篇文章主要讲解了“Python的多线程多进程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的多线程多进程是什么”吧!

前提

什么是进程

操作系统中执行的一个程序,类似微信、QQ,每个程序都是一个进程
Python的多线程多进程是什么

概念

fork、spawn

 
常见通信机制

什么是线程

特点

单核 CPU 系统注意事项

多线程的好处

多线程的坏处

Python 实现并发编程的方式

Python 中的多进程

Linux 下的 fork 函数
Python 提供的 fork 函数

os 模块提供了 fork() 

Window 下没有fork()的调用

使用多进程和不使用多进程的区别(写代码)

不使用多进程

from random import randintfrom time import time, sleepdef 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()
执行结果
开始下载Python从入门到住院.pdf...
Python从入门到住院.pdf下载完成! 耗费了10秒
开始下载Peking Hot.avi...
Peking Hot.avi下载完成! 耗费了9秒
总共耗费了19.02秒.

可以看到需要先等第一个文件下载完才能下载第二个文件,效率很低

使用多进程

from random import randintfrom time import time, sleepfrom multiprocessing import Processdef download_task(filename):print('开始下载%s...' % filename)
    time_to_download = randint(5, 10)
    sleep(time_to_download)print('%s下载完成! 耗费了%d秒' % (filename, time_to_download))def main2():
    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__':
    main2()
执行结果
开始下载Python从入门到住院.pdf...
开始下载Peking Hot.avi...
Python从入门到住院.pdf下载完成! 耗费了6秒
Peking Hot.avi下载完成! 耗费了10秒
总共耗费了10.17秒.

两个任务同时执行,总耗时不再是两个任务的时间总和

知识点

Python 中的多线程

前言

推荐 threading 模块来实现多线程编程,它提供了更好的面向对象封装

多线程的实现方式

#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__  = 
__Time__   = 2021/3/19 18:17
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/"""from random import randintfrom threading import Threadfrom time import time, sleepdef download_task(filename):print('开始下载%s...' % filename)
    time_to_download = randint(5, 10)
    sleep(time_to_download)print('%s下载完成! 耗费了%d秒' % (filename, time_to_download))def main3():
    start = time()
    p1 = Thread(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__':
    main3()
执行结果
开始下载Python从入门到住院.pdf...
开始下载Peking Hot.avi...
Peking Hot.avi下载完成! 耗费了6秒
Python从入门到住院.pdf下载完成! 耗费了8秒
总共耗费了8.01秒.

 一样执行效率高很多

自定义线程类

#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__  = 
__Time__   = 2021/3/19 18:17
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/"""from random import randintfrom threading import Threadfrom time import time, sleepclass downLoadTask(Thread):def __init__(self,filename):
        super().__init__()
        self.filename = filenamedef run(self) -> None:print('开始下载%s...' % self.filename)
        time_to_download = randint(5, 10)
        sleep(time_to_download)print('%s下载完成! 耗费了%d秒' % (self.filename, time_to_download))def main3():
    start = time()
    p1 = downLoadTask("Python从入门到住院.pdf")
    p2 = downLoadTask("Peking Hot.avi")
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    end = time()print('总共耗费了%.2f秒.' % (end - start))if __name__ == '__main__':
    main3()
执行结果
开始下载Python从入门到住院.pdf...
开始下载Peking Hot.avi...
Peking Hot.avi下载完成! 耗费了6秒
Python从入门到住院.pdf下载完成! 耗费了9秒
总共耗费了9.00秒.

也是一样的高效运行

重点知识:start 和 run 方法的区别

比较点startrun
作用启动线程,获取 CPU 时间片运行线程指定的代码块
线程状态可运行状态运行状态
调用次数一个线程只能调用一次可以重复调用
运行线程创建了一个子线程,线程名是自己命名的在主线程中调用了一个普通函数
注意点想用多线程,必须调用 start()

Python 中的协程

什么是协程

Python 中,单线程+异步 I/O 的编程模型

协程的优势
重点

要充分利用 CPU 的多核特性,应该使用多进程+协程的方式

感谢各位的阅读,以上就是“Python的多线程多进程是什么”的内容了,经过本文的学习后,相信大家对Python的多线程多进程是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. Python的优势是什么
  2. python的读音是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:MYSQL中怎么设置表空间

下一篇:Mycat中怎么实现MySQL单库分表

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》