首页 > 编程语言 >python多线程

python多线程

时间:2023-08-29 20:34:08浏览次数:40  
标签:python dest source 线程 file 进程 多线程 dir

python多线程

多线程

threading,利用CPU和IO可以同时执行的原理

多进程

multiprocessing,利用多核CPU的能力,真正的并行执行任务

异步IO

asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行

  • 使用Lock对资源加锁,防止冲突访问
  • 使用Queue实现不同线程/进程之间的数据通信,实现生产者-消费者模式
  • 使用线程池Pool/进程池Pool,简化线程/进程的任务提交、等待结束、获取结果
  • 使用sbuprocess启动外部程序的进程,并进行输入输出交互

python并发编程三种形式

  • 多线程Thread
  • 多进程Process
  • 多协程Coroutine

多进程完成多任务

  • 进程的创建步骤
导入进程包
import multiprocessing
通过进程类创建进程对象
#args指定任务传参,或者使用kwargs={"num":2}
进程对象=multiprocessing.Process(target=任务名,args=(3,))
启动进程执行任务
进程对象.start()

获取当前进程的编号

os.getpid()
#获取父进程编号
os.getppid()

主进程会等待所有子进程执行结束后再结束

设置守护主进程

#设置守护主进程,主进程退出后子进程直接销毁,不再执行子进程中的代码
work_process.daemon = True

多线程完成多任务

  • 线程的创建步骤
import threading
线程对象=threading.Thread(target=任务名)
线程对象.start()

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

  • 一般情况下,主线程要等到子线程都结束,自己再结束
  • 想要主线程不等待子线程执行完成,可以设置守护主线程
#设置守护主线程方式1,daemon=True守护主线程
work_thread = threading.Thread(target=work,daemon=True)
#设置守护主线程方式2
work_thread.setDaemon(True)
work_thread.start()

获取当前线程的信息

#通过current_thread方法获取线程对象
current_thread = threading.current_thread()
#通过current_thread对象可以知道线程的相关信息,例如被创建的顺序
print(current_thread)
  • 线程之间执行顺序是无序的,是由CPU调度决定某个线程先执行

案例演示

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
    # 打开文件开始读写
    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 = ''
    # 目标文件夹
    dest_dir = ''

    try:
        # 创建文件夹
        os.mkdir(dest_dir)
    except:
        print("目标文件夹已经存在了!")

    # 获取源目录中所有文件列表
    file_list = os.listdir(source_dir)
    # 遍历列表中所有文件
    for file_name in file_list:
        # 调用函数执行拷贝
        copy_file(file_name,source_dir,dest_dir)
        # 创建多线程
        sub_thread = threading.Thread(target=copy_file,args=(file_name,source_dir,dest_dir))

        sub_thread.start()

标签:python,dest,source,线程,file,进程,多线程,dir
From: https://www.cnblogs.com/jinbb/p/17665767.html

相关文章

  • leetcode & c++多线程刷题日志
    1.按序打印按序打印解法互斥锁classFoo{mutexmtx1,mtx2;public:Foo(){mtx1.lock(),mtx2.lock();}voidfirst(function<void()>printFirst){printFirst();mtx1.unlock();}voidsecond(function<voi......
  • Centos误删系统自带python2.7,yum报错恢复方法
     使用wget分别下载python以及yum的rpm包资源地址如下:          http://vault.centos.orgmkdir/usr/local/src/pythoncd/usr/local/src/pythonwgethttp://vault.centos.org/7.6.1810/os/x86_64/Packages/python-backports-1.0-8.el7.x86_64.rpmwgethtt......
  • python3.6使用wordcloud 1.9报错ValueError: Only supported for TrueType fonts
    该版本的wordcloud的源码中显示不兼容python3.6 解决办法:修改wordcloud源码修改前508:box_size=draw.textbox((0,0),word,font=transposed_font,anchor="lt")510:result=occupancy.sample_position(box_size[3]+self.margin,......
  • python字符串内容分割
    分隔主要涉及到split,rsplit,splitlines,partition和rpartition五个方法。split以指定字符串为分隔符切片,如果maxsplit有指定值,则仅分隔maxsplit+1个子字符串。返回的结果是一个列表。没有指定分隔符,默认使用空格,换行等空白字符进行分隔char="hello\nworld"result=c......
  • 【Python】报错处理笔记
    shutil.rmtree(path)报错:PermissionError:[WinError5]分析:对应的目录或文件被设置了只读属性解决方案:defremove_readonly(func,path,_):#错误回调函数,改变只读属性位,重新删除"Clearthereadonlybitandreattempttheremoval"os.chmod(path,stat.S_I......
  • 重启python-数据类型-字典和集合
    一,字典和集合初始字典:d1={'name':'jason','age':20,'gender':'male'}集合:s1={1,2,3,4,5}二,二者的区别唯一的区别,就是集合没有键和值的配对,是一系列无序的、唯一的元素组合。三,内置操作字典:增删改查集合:增删改查注意:集合的pop()操作是删除集合中最后一个元素,可是......
  • Python 中一些常用的
    对变量类型转换的内置函数int():将一个数值或字符串转换成整数,可以指定进制。float():将一个字符串转换成浮点数。str():将指定的对象转换成字符串形式,可以指定编码。chr():将整数转换成该编码对应的字符串(一个字符)。ord():将字符串(一个字符)转换成对应的编码(整数)。这个经常用。......
  • 多线程|volatile的使用
    一、内存可见性问题先来看如下代码classMyCounter{publicintflag=0;}publicclassThreadDemo22{publicstaticvoidmain(String[]args){MyCountermyCounter=newMyCounter();Threadt1=newThread(()->{while(myCounter.f......
  • Python+Flask设置接口开机自启动
    Windows系统适用创建一个批处理文件(例如 start_flask_api.bat),内容如下:@echooffcd/dC:\path\to\your\flask\app//你要启动程序的路径pythonapp.py//你要启动的程序将批处理文件添加到Windows的启动项中:按下Win+R键打开"运行"对话框,输入 shell:startup 并按回车......
  • Windows环境 python手动安装三方库详解
    当运行pip安装三方库时,无法正常安装,可以自己手动安装一下详解:1、首先找到需要下载的三方库的安装包---三方库下载地址:https://pypi.org/project  打开网址搜索需要下载的三方库的安装包,我是以“locust”为例找到需要下载的三方库,点击进去找到对应的版本下载对应的****......