Python 多线程编程(三)

1.线程的介绍

1.1实现多任务的另一种形式

在这里插入图片描述

1.2为什么使用多线程

在这里插入图片描述

1.3多线程的作用


在这里插入图片描述

2.多线程执行多任务

2.1线程的创建步骤

在这里插入图片描述

2.2 通多线程类创建线程对象

在这里插入图片描述

2.3 线程创建于启动的代码

示例:

import time
import  threading

# 唱歌
def sing():
    for i in range(3):
        print("唱歌....")
        time.sleep(0.5)

def dance():
    for i in range(3):
        print("跳舞....")
        time.sleep(0.5)

if __name__ == '__main__':

    sing_thread = threading.Thread(target= sing)
    dance_thread = threading.Thread(target= dance)
    sing_thread.start()
    dance_thread.start()

"G:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\python.exe" G:/PythonCode/Multipleprocesses_Learn/多线程多任务.py
唱歌....
跳舞....
唱歌....
跳舞....
唱歌....
跳舞....

Process finished with exit code 0

3.线程执行带有参数的任务

3.1线程执行带有参数的任务

在这里插入图片描述

3.2 args参数的使用

在这里插入图片描述

3.3 kwargs参数的使用

在这里插入图片描述
示例:

import time
import  threading

# 唱歌
def sing(num,name):
    for i in range(num):
        print(name,"唱歌....")
        time.sleep(0.5)

def dance(num,name):
    for i in range(num):
        print(name,"跳舞....")
        time.sleep(0.5)

if __name__ == '__main__':

    sing_thread = threading.Thread(target= sing,args=(3,"ttt"))
    dance_thread = threading.Thread(target= dance,kwargs={"num":3,"name":"ggg"})
    sing_thread.start()
    dance_thread.start()

"G:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\python.exe" G:/PythonCode/Multipleprocesses_Learn/带参数的多线程.py
ttt 唱歌....
ggg 跳舞....
ggg 跳舞....
ttt 唱歌....
ttt 唱歌....
ggg 跳舞....

Process finished with exit code 0

在这里插入图片描述

4.主线程和子线程的结束顺序

在这里插入图片描述
示例:

import time
import threading

def work():
    for i in range(10):
        #共延时2s
        print("work ...")
        time.sleep(0.2)

if __name__ == '__main__':
    work_process = threading.Thread(target= work)   #子线程执行两秒
    work_process.start()
    time.sleep(1)                           #主线程执行一秒
    print("主进程完成")
"G:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\python.exe" G:/PythonCode/Multipleprocesses_Learn/主线程与子线程的执行顺序.py
work ...
work ...
work ...
work ...
work ...
主进程完成
work ...
work ...
work ...
work ...
work ...

Process finished with exit code 0

4.1 设置守护主线程

在这里插入图片描述
示例:

import time
import threading


def work():
    for i in range(10):
        #共延时2s
        print("work ...")
        time.sleep(0.2)
        
if __name__ == '__main__':

    #设置守护主线程
    #方法1
    # work_process = threading.Thread(target= work,daemon= True)
    # work_process.start()

    #方法2   与方法1效果相同
    work_process = threading.Thread(target= work)
    work_process.setDaemon(True)
    work_process.start()

    time.sleep(1)                           #主线程执行一秒
    print("主进程完成")
"G:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\python.exe" G:/PythonCode/Multipleprocesses_Learn/主线程与子线程的执行顺序.py
work ...
work ...
work ...
work ...
work ...
主进程完成

Process finished with exit code 0

在这里插入图片描述

5.线程间的执行顺序

在这里插入图片描述

5.1线程之间的执行是无序的

在这里插入图片描述

5.2 获取当前的线程信息

在这里插入图片描述

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()
"G:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\python.exe" G:/PythonCode/Multipleprocesses_Learn/线程间执行的顺序.py
<Thread(Thread-3, started 15020)>
<Thread(Thread-2, started 11748)>
<Thread(Thread-1, started 5272)>
<Thread(Thread-4, started 22076)>
<Thread(Thread-5, started 17036)>

Process finished with exit code 0

在这里插入图片描述

6.进程与线程的对比

6.1 关系对比

在这里插入图片描述

6.2 区别对比

在这里插入图片描述

6.3 优缺点对比

在这里插入图片描述

7.多线程实现文件夹高并发Copy器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例:

import os
import threading

def Copy(filename ,source_dir,dest_dir):
    source_path = source_dir + "/"+filename
    dest_path = dest_dir + "/" + filename

    with open(source_path,'rb') as source_file:
        with open(dest_path,'wb') as dest_file:
            while True:
                data = source_file.read()
                if data:
                    dest_file.write(data)
                else:
                    break






if __name__ == "__main__":
    source_dir = "."
    dest_dir  = "../CCCCCC"
    # dest_dir = "G:/PythonCode/ccc"

    try:
        os.mkdir(dest_dir)
    except:
        print("目标文件夹已存在")

    file_list = os.listdir(source_dir)

    for file_name in file_list:
        sub_thread = threading.Thread(target=Copy,args=(file_name,source_dir,dest_dir))
        sub_thread.start()

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Michael.Scofield

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

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

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

打赏作者

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

抵扣说明:

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

余额充值