参考资料: 黑马程序员python多线程编程教程
1. 概念
-
多任务:同一时间执行多个任务。 ①并发:一段时间交替执行多个任务。 ②并行:同时一起执行多个任务。 -
进程:一个正在运行的程序。 ①操作系统需要为每个进程分配资源。 ②可创建的进程数量有限。 -
线程: 是程序执行的最小单元。 -
对比 ①关系:线程依附于进程,一个进程可能有多个线程。 ②区别:创建进程的开销比线程要大,进程是操作系统资源分配的基本单元,线程是CPU调度的基本单位。线程不能独立运行。 ③优缺点:进程可以用多核,但资源开销大且进程数量有限。线程资源开销小,但不能使用多核。
2. 多进程完成多任务
(1)进程创建步骤
- 创建进程对象:创建进程时必须指定目标任务名,也就是函数名。
(2)进程执行带参数的任务
(3)获得进程编号
(4)注意点
进程对象.daemon = true;
3. 多进程实战案例
(1)需求分析 实现一个高并发的多任务拷贝器。 (2)代码
import os
import multiprocessing
def copy_file(file_name, source_dir, dest_dir):
source_path = source_dir + '/' + file_name
dest_path = dest_dir + '/' + file_name
print(source_path, '--->', dest_path)
with open(source_path, 'rb') as source_file:
with open(dest_path, 'wb') as dest_file:
while True:
data = source_file.read(1024)
if data:
dest_file.write(data)
else:
break
if __name__ == '__main__':
source_dir = 'python图片'
dest_dir = 'python图片(复制)'
try:
os.mkdir(dest_dir)
except:
print('目标文件已存在')
file_list = os.listdir(source_dir)
print(file_list)
for file_name in file_list:
sub_process = multiprocessing.Process(target=copy_file,
args=(file_name, source_dir, dest_dir))
sub_process.start()
4. 多线程执行多任务
(1)创建步骤 (2)线程执行带参数的任务
(3)主线程和子线程的执行顺序
- 主线程会等待所有子线程结束后才能结束。
- 设置守护子线程:一旦主线程结束,子线程自动销毁。
线程对象.setDaemon = true;
(4)线程之间的执行顺序
5. 多线程实战案例
(1)需求分析 实现一个高并发的多任务拷贝器。 (2)代码
import os
import threading
def copy_file(file_name, source_dir, dest_dir):
source_path = source_dir + '/' + file_name
dest_path = dest_dir + '/' + file_name
print(source_path, '--->', dest_path)
with open(source_path, 'rb') as source_file:
with open(dest_path, 'wb') as dest_file:
while True:
data = source_file.read(1024)
if data:
dest_file.write(data)
else:
break
if __name__ == '__main__':
source_dir = 'python图片'
dest_dir = 'python图片(复制2)'
try:
os.mkdir(dest_dir)
except:
print('目标文件已存在')
file_list = os.listdir(source_dir)
print(file_list)
for file_name in file_list:
sub_process = threading.Thread(target=copy_file,
args=(file_name, source_dir, dest_dir))
sub_process.start()
|