iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python教程之进程和线程
  • 191
分享到

python教程之进程和线程

2024-04-02 19:04:59 191人浏览 安东尼

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

摘要

目录进程和线程的区别和联系多进程线程池多线程总结进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个概念,就难倒过不少初学者——今天

进程和线程的区别和联系

终于开始加深难度,来到进程和线程的知识点~

单就这两个概念,就难倒过不少初学者——今天学了概念,明天就忘记;明天学了例子,又忘记了概念。

要理解进程和线程的联系和区别,我举个特简单的例子:

你的电脑有两个浏览器,一个谷歌浏览器,一个qq浏览器。

一个浏览器就是一个进程。

然后,你打开了谷歌浏览器,百度搜索了测试奇谭,又新开一个标签页,打开谭叔的文章,如下图所示:

image-20210404220106555

你可以这样理解——在同一个浏览器打开的两个网页就是两个线程。如果我关闭了浏览器,这两个线程也没有了。

好了,当你有了概念后,我才好讲两者的区别和联系。

进程

  • 优点
    • 稳定性高,当程序崩溃后,不影响其他进程的使用。即谷歌浏览器崩溃后,qq浏览器还可以正常使用。
  • 缺点
    • 创建进程的代价大。即当你开了各种各样的浏览器后,你的电脑会特别卡,因为电脑内存和CPU有上限。

线程

  • 优点
    • 多线程通常比多进程快一点,但优势不大
  • 缺点
    • 任何一个线程挂掉会造成整个进程崩溃,因为线程共享进程的内存(浏览器的例子不再适用,可以理解为绑在一条船上的蚂蚱)

多进程

因为大多数小伙伴用的windows操作系统,所以针对Unix/linux的fork()调用抛开不谈。

python,一般使用multiprocessing实现多进程。

import os
from multiprocessing import Process
def run\_proc(name):
    print('开始执行子进程 %s (%s)…' % (name, os.getpid()))
# 子进程要执行的代码
if __name__ == '\_\_main\_\_':
    print('父进程 %s.' % os.getpid())
    p = Process(target=run_proc, args=('test',)) # 创建一个Process实例
    print('子进程即将开始.')
    p.start()  # 用start()方法启动实例
    p.join()   # join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步
    print('子进程结束.')

要细讲吗?

其实,我的备注写得很全,你只需copy代码下来执行一次,或者debug一次,就能明白。

线程池

如何理解?

即代码可运行的进程数量,有个地方管控它。

from multiprocessing import Pool
import os
import time
import random
def long\_time\_task(name):
    print('开始 task %s (%s)...' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print('Task %s 执行花费 %0.2f 秒.' % (name, (end - start)))
if __name__ == '\_\_main\_\_':
    print('父亲进程 %s.' % os.getpid())
    p = Pool(3)
    # 因为Pool的默认大小是4,故task 0,1,2,3是立刻执行的,而task 4要等待前面某个task完成后才执行,但最多同时执行4个进程
    # 由于Pool的默认大小是CPU的核数,如果你拥有8核CPU,要提交至少9个子进程才能看到等待效果
    for i in range(5):
        p.apply_async(long_time_task, args=(i,))
    print('等待子进程结束...')
    p.close()
    # 对Pool对象调用join()方法会等待所有子进程执行完毕
    # 调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了
    p.join()
    print('所有子进程已执行.')

以上,是必知必会的。

当然,最好的学习时机是:当你要用时,再来复盘学,效果最佳。

如果你学了,没有使用场景,我建议缓一缓学或者作为知识储备。

多线程

多线程有三点必须提前明确:

  • 多任务需求可以由多进程完成,也可以由一个进程内的多线程完成
  • 进程是由若干线程组成
  • 一个进程至少有一个线程

Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,我们一般使用高级模块threading(对_thread进行过封装)。

启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行,我们看一个简单的例子:

import time
import threading
# 新线程执行的代码
def loop():
    # 由于任何进程默认就会启动一个线程,我们把该线程称为主线程,主线程又可以启动新的线程,
    # Python的threading模块有个current\_thread()函数,它永远返回当前线程的实例
    print('线程ss %s 运行中…' % threading.current_thread().name)
    n = 0
    # 主线程实例的名字叫MainThread,子线程的名字在创建时指定,我们用LoopThread命名子线程,在打印输出的时候显示名字
    while n < 5:
    n = n + 1
    print('线程ss %s >>> %s' % (threading.current_thread().name, n))
    time.sleep(1)
print('线程ss %s 已结束.' % threading.current_thread().name)
print('线程 %s is 运行中…' % threading.current_thread().name)
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()
'''
对于 join()方法而言,其另一个重要方面是其实它根本不需要调用。
一旦线程启动,它们 就会一直执行,直到给定的函数完成后退出。
如果主线程还有其他事情要去做,而不是等待这些线程完成(例如其他处理或者等待新的客户端请求),
就可以不调用 join()。join()方法只有在你需要等待线程完成的时候才是有用的
'''
print('线程 %s 已结束.' % threading.current_thread().name)

同样,以上内容,是必知必会的。

并且,工作场景,我们一般会使用多线程处理问题,而非多进程。(注意:是一般)

至于进程间通信、线程、GIL锁、多线程变量、线程间通信、异步协程等知识,讲起来比较复杂,也不是极简教程的核心,你可以先自学,或者当你真正要使用它的时候再去看,再去学。

总结

01 多线程、多进程,是必知必会的;

02 学习进度自己琢磨,既不能死磕,亦不能简单跳过;

03 小伙伴比较关心,面试时会不会被问到。答:一般公司不会,so?

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: python教程之进程和线程

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

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

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

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

下载Word文档
猜你喜欢
  • python教程之进程和线程
    目录进程和线程的区别和联系多进程线程池多线程总结进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个概念,就难倒过不少初学者——今天...
    99+
    2024-04-02
  • python之线程、进程
      进程:资源的集合  线程:操作CPU的最小调试单位    最简单的多线程实例如下:#!/usr/bin/python #Author:sean #线程有2种调用方式,如下: #直接调用 import threading import ...
    99+
    2023-01-31
    线程 进程 python
  • Python高级教程之线程进程和协程的代码解析
    目录进程进程 5 种基本状态进程的特点进程间数据共享进程池进程的缺点线程线程的定义使用线程模块的简单示例代码解析协程协程与线程Python 协程协程的执行关闭协程链接协程以创建管道总...
    99+
    2024-04-02
  • python之多线程与多进程
    1. 多进程与多线程 (1)背景:为何需要多进程或者多线程:在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任务之间丝毫不会互相干扰。使用多...
    99+
    2023-01-31
    之多 线程 进程
  • Python并发编程之线程池/进程池
    原文来自开源中国前言python标准库提供线程和多处理模块来编写相应的多线程/多进程代码,但当项目达到一定规模时,频繁地创建/销毁进程或线程是非常消耗资源的,此时我们必须编写自己的线程池/进程池来交换时间空间。但是从Python3.2开始,...
    99+
    2023-06-02
  • Python进程、线程
    1.线程启动 def run(n): print('%s in thread...'%n) t=threading.Thread(target=run,args=(n,)) t.start #线程等待 t.join 2.多线程同时...
    99+
    2023-01-31
    线程 进程 Python
  • python socket多线程和多进程
    在socket中,如果直接创建的话,是只能接受一个用户的请求需要实现socketserver中的handle方法,可以实现多进程并发访问 SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理...
    99+
    2023-01-31
    多线程 进程 python
  • python多线程和多进程(二)
    ---恢复内容开始--- 一、多进程   1、multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。 import time from mult...
    99+
    2023-01-30
    多线程 进程 python
  • Python进程/线程/协程
    第1章 操作系统历史1.1为什么要有操作系统?程序员无法把所有的硬件操作细节全部了解到,管理这些硬件并且加以优化使用时非常繁琐的工作,这个繁琐的工作就是由操作系统来干的,有了它,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件...
    99+
    2023-01-31
    线程 进程 Python
  • Python多线程之线程创建和终止
    python主要是通过thread和threading这两个模块来实现多线程支持。python的thread模块是比较底层的模块,python的threading模块是对thread做了一些封装,可以更加方便的被使用。但是python(c...
    99+
    2023-01-31
    线程 多线程 Python
  • Python全栈之进程和守护进程
    目录1. 理解进程2. 进程的语法3. join自定义进程类4. 守护进程总结 1. 理解进程 进程的概念:(process) 进程就是正在运行的程序,它是操作系统中,资源分配的...
    99+
    2024-04-02
  • python3进程和线程
    进程基本概念 进程是执行中的程序, 也就是说进程是动态的, 程序是静态的 进程是操作系统分配资源的最小单位,有一个进程控制块(PCB), 有自己唯一的一个进程标识符(PID) 进程之间相互独立, 内存不共享 每个进程都是一个实体, ...
    99+
    2023-01-31
    线程 进程
  • python多进程和多线程介绍
    目录一、什么是进程和线程 二、多进程和多线程 三、python中的多进程和多线程1、多进程2、多线程一、什么是进程和线程  进程是分配资源的最小单位,线...
    99+
    2024-04-02
  • 深度解析Python线程和进程
    目录什么是进程什么是线程线程与进程的区别并行与并发Python中的多进程Python中进程操作线程Python的threading模块锁Lock:全局解释器锁(GIL)参考文章:什么...
    99+
    2024-04-02
  • 详解Python中的进程和线程
    进程是什么? 进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执...
    99+
    2024-04-02
  • java高并发之理解进程和线程
    目录进程线程进程与线程的一个简单解释总结进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指...
    99+
    2024-04-02
  • python——多进程、线程、携程
    http://mp.weixin.qq.com/splg_nld=1&plg_usr=1&scene=23&mid=2652078313&plg_vkey=1&__biz=MzI2NjA3NTc4Ng...
    99+
    2023-01-31
    线程 携程 进程
  • Python并发编程实例教程之线程的玩法
    目录一、线程基础以及守护进程二、线程锁(互斥锁)三、线程锁(递归锁)四、死锁五、队列六、相关面试题七、判断数据是否安全八、进程池 & 线程池总结一、线程基础以及守护进程 线...
    99+
    2024-04-02
  • 实例详解Python的进程,线程和协程
    目录前言前提条件相关介绍实验环境进程多进程用进程池对多进程进行操作线程使用_thread模块实现使用 threading 模块实现协程使用asyncio模块实现总结前言 本文用Pyt...
    99+
    2024-04-02
  • Python的进程,线程和协程实例分析
    这篇“Python的进程,线程和协程实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python的进程,线程和协程实例...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作