1 多线程是Python程序中实现多任务的一种方式
2 线程是程序执行的最小单元
3 同属于一个进程的多个线程共享进程所拥有的全部资源

多线程实现多任务
1 导入线程模块
import threading
2 通过线程类创建线程对象
线程对象 = threading.Thread(target = 任务名)
3 启动线程执行任务
线程对象。start()


单线程
import threading
import time
def sing():
for i in range(3):
print("...唱歌...")
time.sleep(1)
def dance():
for i in range(3):
print("...跳舞...")
time.sleep(1)
if __name__ == '__main__':
sing()
dance()
改进,多线程
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 9:41
# @Author : ptg
# @Email : zhxwhchina@163.com
# @File : 多线程.py
# @Software: PyCharm
import threading
import time
def sing():
for i in range(3):
print("...唱歌...")
time.sleep(1)
def dance():
for i in range(3):
print("...跳舞...")
time.sleep(1)
if __name__ == '__main__':
sing_thread = threading.Thread(target=sing)
dance_thread = threading.Thread(target=dance)
sing_thread.start()
dance_thread.start()
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 9:41
# @Author : ptg
# @Email : zhxwhchina@163.com
# @File : 多线程.py
# @Software: PyCharm
import threading
import time
def sing(num):
for i in range(num):
print("...唱歌...")
time.sleep(1)
def dance(count):
for i in range(count):
print("...跳舞...")
time.sleep(1)
# print("real_time", real_time)
if __name__ == '__main__':
# start_time = time.time()
sing_thread = threading.Thread(target=sing,args=(3,))
# 执行任务传递参数
dance_thread = threading.Thread(target=dance,kwargs={"count":2})
sing_thread.start()
dance_thread.start()
# end_time = time.time()
# real_time = end_time - start_time
主线程结束子线程未结束
import time
import threading
def work():
for i in range(10):
print("工作...")
time.sleep(0.2)
if __name__ == '__main__':
sub_thread = threading.Thread(target=work)
sub_thread.start()
# 主线程等待1s,后结束
time.sleep(1)
print("主线程结束了...")
主线程结束结束后,子线程也相应的结束
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 14:48
# @Author : ptg
# @Email : zhxwhchina@163.com
# @File : 主线程和子线程结束顺序.py
# @Software: PyCharm
import time
import threading
def work():
for i in range(10):
print("工作...")
time.sleep(0.2)
if __name__ == '__main__':
# 主线程结束时不想等待子线程程序再结束,可以设置子线程守护主线程
# 1 threading.Thread(target=work,damon=True
# 2 线程对象,setDamamon(true)
sub_thread = threading.Thread(target=work)
sub_thread.setDaemon(True)
sub_thread.start()
# 主线程等待1s,后结束
time.sleep(1)
print("主线程结束了...")
# 结论:主线程等待结束
# 守护主线程


线程执行的顺序
import threading
def task():
# 获取当前的线程对象
thread = threading.current_thread()
print(thread)
if __name__== '__main__':
for i in range(5):
sub_thread = threading.Thread(target=task)
sub_thread.start()
E:\Anaconda\envs\Pytorch\python.exe E:/PycharmSoftware/project3/线程执行顺序.py
<Thread(Thread-1, started 996)>
<Thread(Thread-2, started 21204)>
<Thread(Thread-3, started 18148)>
<Thread(Thread-4, started 18684)>
<Thread(Thread-5, started 19144)>
import threading
import time
def task():
time.sleep(1)
# 获取当前的线程对象
thread = threading.current_thread()
print(thread)
if __name__== '__main__':
for i in range(5):
sub_thread = threading.Thread(target=task)
sub_thread.start()
# 结论:多线程之间执行是无序的,是由CPU调度决定的
=================================================================================================


多进程实现拷贝copy
从一个文件夹中拷贝到另一个项目中
代码如下:
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/11/9 18:56
# @Author : ptg
# @Email : zhxwhchina@163.com
# @File : mat1.py
# @Software: PyCharm
import os
import multiprocessing
def copy_file(file_name,source_dir,dest_dir):
# 1 拼接源文件路径和目标路径
source_path = source_dir + './' + file_name
dest_path = dest_dir +'./' + file_name
# 2 打开源文件和目标文件
with open(source_path, "rb") as source_file:
with open(dest_path, "wb") as dest_file:
# 3 循环读取源文件到目标路径
while True:
data = source_file.read(1024)
if data:
dest_file.write(data)
else:
break
if __name__ == '__main__':
# 1 定义源文件夹和目标文件夹
source_dir = r'd:\desktop\test'
dest_dir =r'd:\desktop\dest_dir'
#
# 2 创建目标文件夹
try:
os.mkdir(dest_dir)
except:
print("文件夹已经存在")
# 3 读取源文件夹的文件列表
file_list = os.listdir(source_dir)
print(file_list)
# 4 遍历文件列表实现拷贝
for file_name in file_list:
copy_file(file_name,source_dir,dest_dir)
# 5 使用多进程实现多任务拷贝
sub_process = multiprocessing.Process(target=copy_file,args=(file_name,source_dir,dest_dir))
sub_process.start()
多线程实现文件拷贝
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/11/9 18:56
# @Author : ptg
# @Email : zhxwhchina@163.com
# @File : mat1.py
# @Software: PyCharm
import os
import threading
def copy_file(file_name,source_dir,dest_dir):
# 1 拼接源文件路径和目标路径
source_path = source_dir + './' + file_name
dest_path = dest_dir +'./' + file_name
# 2 打开源文件和目标文件
with open(source_path, "rb") as source_file:
with open(dest_path, "wb") as dest_file:
# 3 循环读取源文件到目标路径
while True:
data = source_file.read(1024)
if data:
dest_file.write(data)
else:
break
if __name__ == '__main__':
# 1 定义源文件夹和目标文件夹
source_dir = r'd:\desktop\test'
dest_dir =r'd:\desktop\dest_dir'
#
# 2 创建目标文件夹
try:
os.mkdir(dest_dir)
except:
print("文件夹已经存在")
# 3 读取源文件夹的文件列表
file_list = os.listdir(source_dir)
print(file_list)
# 4 遍历文件列表实现拷贝
for file_name in file_list:
copy_file(file_name,source_dir,dest_dir)
# 5 使用多进程实现多任务拷贝
sub_process = threading.Thread(target=copy_file,args=(file_name,source_dir,dest_dir))
sub_process.start()
(完)!

1425

被折叠的 条评论
为什么被折叠?



