线程池指令系统
线程等待(阻塞)
试一试
from threading import Thread
from time import sleep
from datetime import datetime
from random import randint
def download(name):
print(f'{name}开始下载:{datetime.now()}')
sleep(randint(2, 7))
print(f'{name}下载结束:{datetime.now()}')
if __name__ == '__main__':
t1 = Thread(target=download, args=('明日战纪',))
t2 = Thread(target=download, args=('斗罗大陆',))
t3 = Thread(target=download, args=('独行月球',))
# 示例1: 三个电影都下载结束后打印"全部下载完成"
# t1.start()
# t2.start()
# t3.start()
#
# # 1. 子线程对象.join() - 阻塞当前线程直到指定子线程任务完成
# t1.join()
# t2.join()
# t3.join()
# print('==============全部下载完成!============')
# 示例2:前两个电影都下载完成后才下载第三个电影
t1.start()
t2.start()
t1.join()
t2.join()
t3.start()
多线程池
线程池 - 管理多个线程的工具
线程池工作原理:先创建指定个数的线程,然后添加多个任务(任务数量>线程数量),让线程池中的线程去执行添加的所有任务,直到所有任务都执行完(线程池中的每个线程可能会执行多个任务)。
from threading import Thread, current_thread
from time import sleep
from datetime import datetime
from random import randint
from concurrent.futures import ThreadPoolExecutor
def download(name):
print(f'{name}开始下载:{datetime.now()}', current_thread())
sleep(randint(2, 7))
print(f'{name}下载结束:{datetime.now()}')
if __name__ == '__main__':
# 方案1:直接使用多线程下载1000个电影
num = 0
for _ in range(10):
ts = []
for x in range(100):
num += 1
t = Thread(target=download, args=(f'电影{num}',))
ts.append(t)
t.start()
for x in ts:
x.join()
方案2:使用线程池下载1000个电影
- 创建线程池 - ThreadPoolExecutor(线程数最大值)
pool = ThreadPoolExecutor(3)
- 添加任务
- 一次添加一个任务: submit(函数, 实参1, 实参2, 实参3,…)
注意:实参的数量由前面的函数在调用的时候需要的实参来决定
pool.submit(download, '肖生克的救赎')
pool.submit(download, '霸王别姬')
2)同时添加多个任务: map(函数, 参数对应的序列)
注意:使用map添加多个任务的时候,任务对应的函数必须是有且只有一个参数的函数
pool.map(download, ['V字仇杀队', '恐怖游轮', '沉默的羔羊'])
- 关闭线程池
线程池关闭后无法再添加新的任务,并且会阻塞当前线程等待整个线程池的任务都完成
pool.shutdown()
常见的指令操作
执行指令的工具: Windows - 命令提示符(cmd) 、Mac - 终端
- 运行python程序: - 运算程序的计算机必须先安装python环境
win: python py文件路径
mac: python3 py文件路径 - 进入文件夹: cd
cd 文件夹相对路径、文件夹绝对路径
注意:如果是windows操作系统,cd操作如果要跨盘需要先切盘,然后再cd
切盘方法:C:、E:、D: - 查看当前文件夹的内容
win: dir
Mac:ls - 用指令创建虚拟环境
第一步:找到一个用来放虚拟环境的文件夹
第二步:通过cd指令进入到存放虚拟环境的文件夹中
第三步:创建虚拟环境
python -m venv 虚拟环境名
python3 -m venv 虚拟环境名
第四步:激活虚拟环境
(mac) source 虚拟环境目录/bin/activate
(windows) 虚拟环境目录\ Scripts\activate.bat
第五步:退出虚拟环境
deactivate
5.常用pip指令(pip - Python包管理工具)
pip list - 查看当前环境已经安装过的所有的第三方库
pip install 第三方库名称 - 下载并且安装指定的第三方库
pip install 第三方库名称 -i 镜像地址 - 在指定的镜像地址中下载安装
pip install 第三方库名称==版本号 (也可以在后面继续加 -i 镜像地址)
pip install 第三方库名称1 第三方库名称2…
pip freeze > 依赖文件名 - 生成依赖文件
pip install -r 依赖文件路径 - 批量安装
pip uninstall 第三方库名称 - 卸载指定的第三方库