多线程编程实战

一、多线程概述
1.进程与线程
进程:启动一个qq应用
线程:qq应用里的一些很多操作
在这里插入图片描述
2.进程组成
内存:每个进程的内存是相互独立的
文件/网络句柄:它们是所有的进程所共有的,例如打开同一个文件,去抢同一个网络的端口这样的操作是被允许的
在这里插入图片描述
在这里插入图片描述

3.多线程
在这里插入图片描述

4.Threading模块
1)模块
在这里插入图片描述

2)常用方法:
在这里插入图片描述
在这里插入图片描述
3)基本用法
在这里插入图片描述
4)基本概念
全局解释器锁(GIL):在CPython中,无论CPU有多少核,同时只能执行一个线程,这是由于GIL的存在导致的。可以把GIL看做是执行任务的“通行证”,并且在一个Python进程中,GIL只有一个。

守护进程:其作用就是在主进程想要退出进程的时候,不需要等待自己运行结束,直接退出就行了。

t1.setDaemon(Ture)

死锁:在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。

在这里插入图片描述

5.多线程基础

import time
import os
import threading


# def doing(something):
#     time.sleep(2)
#     print('正在做>>>', something)


# start_time = time.time()
# doing('在上课')
# doing('在加班')
# end_time = time.time()
# print('总共耗时>>>', end_time-start_time)
# os.getpid()  # 获取pid


# ------------------------------------------------------
# 需求:减少执行时间
# 方案:
# io密集型的场景
# ------------------------------------------------------


# def doing(something):
#     print('正在做>>>', something)
#     time.sleep(2)
# start_time = time.time()

# 创建线程
"""
target  你这个线程是做什么---需要执行的函数名
args 一般是一个元组 是你 target 函数x需要传递的实参
直接启动线程:主线程(main)不等待子线程(t1,t2)运行完就结束了

# 需求:主线程退出前,子线程都需要做完事情!
"""
# t1 = threading.Thread(target=doing, args=('我在上课!', ))
# t2 = threading.Thread(target=doing, args=('我在上班!', ))
#
# # 2- 启动线程
# t1.start()  # 异步非阻塞
# t2.start()
#
# # 3- 阻塞主线程继续执行
# t1.join()  # 同步阻塞
# t2.join()
#
# end_time = time.time()
# print('总共耗时>>>', end_time-start_time)


# ------------------------------------------------------
# 需求:减少执行时间
# 方案:
# 计算io密集型的场景
"""
GIL:CPython,同一时刻,只有一个线程在运行,cpu在不同线程之间来回切换
"""
# ------------------------------------------------------


# def doing():
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每 天 早 睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值