+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-03(2)

2019-04(1)

2019-06(1)

2019-07(6)

2019-08(122)

Python-多线程

发布于2020-11-12 22:06     阅读(521)     评论(0)     点赞(23)     收藏(3)


0

1

2

3

4

5

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()

(完)!

原文链接:https://blog.csdn.net/weixin_42989738/article/details/109613961

0

1

2

3

4

5

6

7



所属网站分类: 技术文章 > 博客

作者:我是天上的仙女

链接: https://www.pythonheidong.com/blog/article/617213/b7c4d5510694fc3bda74/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

23 0
收藏该文
已收藏

评论内容:(最多支持255个字符)