当前位置: 首页 > news >正文

德阳市住房和城乡建设局网站一地址和二地址

德阳市住房和城乡建设局网站,一地址和二地址,英文wordpress转中文乱码,黑龙江企业网站建设​ 一、多任务 1.1 概念 多任务就是指#xff1a;同一时间能执行多个任务。比方我们的电脑能一边QQ聊天#xff0c;一边写论文#xff0c;还能听歌。 1.2 多任务的优势#xff1a; 多任务的最大好处是 充分利用CPU资源#xff0c;提高程序的执行效率。 1.3 多任务的两种表… ​ 一、多任务  1.1 概念 多任务就是指同一时间能执行多个任务。比方我们的电脑能一边QQ聊天一边写论文还能听歌。 1.2 多任务的优势 多任务的最大好处是 充分利用CPU资源提高程序的执行效率。 1.3 多任务的两种表现形式 1并发 在一段时间内交替去执行多个任务。 例子 对于单核CPU处理多任务操作系统轮流让各个任务交替执行。如下图所示 2并行 在一段时间内真正的同时一起执行多个任务。 例子 对于多核cpu处理多任务操作系统会给cpu的每个内核安排一个执行的任务 多个内核是真正的一起同时执行多个任务。这里需要注意多核cpu是并行的执行多任务始终有多个任务一起执行。 二、进程 在python中想要实现多任务可以使用多进程来实现。 2.1 进程的概念 进程(Process) 是资源分配的最小单位它是操作系统进行资源分配和调度运行的基本单位通俗理解: 一个正在运行的程序就是一个进程。例如正在运行的qq,微信等他们都是一个进程。 注意一个正在运行的程序才叫进程而没有运行的程序只能叫程序不能叫进程。 同时一个程序可以有一个或者多个进程。 2.2 多进程的作用 上图中是一个非常简单的程序一旦运行hello.py这个程序按照代码的执行顺序, func_ a函数执行完毕后才能执行func_ b函数。如果可以让func a和func _b同时运行,显然执行hello.py这个程序的效率会大大提升。 那怎么实现呢接着看 如下图所示当运行hello.py这个程序的时候先创建一个主进程之后再创建了一个子进程让主进程执行func_a让子进程执行func_b这样就使用多进程实现了多任务。 2.3 多进程完成多任务 1进程的创建步骤 1、导入进程包 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span multiprocessing /code/span/span/span/span 2、通过进程类创建进程对象 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-python进程对象 span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/span任务名span stylecolor:#999999)/span /code/span/span/span/span 3、启动进程执行任务 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-python进程对象span stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 2多进程例子 下面程序是单进程先执行唱歌的函数再执行跳舞的函数。需要3秒完成。 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span timespan stylecolor:#6272a4# 唱歌/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fdsing/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 延迟0.5秒/span span stylecolor:#6272a4# 跳舞/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fddance/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spansingspan stylecolor:#999999(/spanspan stylecolor:#999999)/spandancespan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 上面的程序怎么使用多进程实现呢下面的程序实现了多进程实现多任务我们会发现只需要1.5秒执行完了唱歌和跳舞是交替执行的。 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#6272a4# 1.导入进程包/span span stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span multiprocessingspan stylecolor:#6272a4# 唱歌/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fdsing/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 延迟0.5秒/spanspan stylecolor:#6272a4# 跳舞/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fddance/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 2.使用进程类创建进程对象/spansing_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spansingspan stylecolor:#999999)/spandance_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spandancespan stylecolor:#999999)/spanspan stylecolor:#6272a4# 3.使用进程对象启动进程执行指定任务/spansing_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spandance_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 2.4 进程执行带有参数的任务 1参数说明 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-python进程对象 span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/span任务名span stylecolor:#999999,/span argsspan stylecolor:#999999,/span kwargsspan stylecolor:#999999)/span /code/span/span/span/span 1 2例子 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#6272a4# 1.导入进程包/span span stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span multiprocessingspan stylecolor:#6272a4# 唱歌/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fdsing/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999,/span namespan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spannamespan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 延迟0.5秒/spanspan stylecolor:#6272a4# 跳舞/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fddance/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999,/span namespan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spannamespan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 2.使用进程类创建进程对象/spanspan stylecolor:#6272a4# args:使用元组方式给指定任务传参/spansing_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spansingspan stylecolor:#999999,/span argsspan stylecolor:#6272a4/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999,/span span stylecolor:#f1fa8c李华/spanspan stylecolor:#999999)/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# kwargs:使用字典方式给指定任务传参/spandance_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spandancespan stylecolor:#999999,/span kwargsspan stylecolor:#6272a4/spanspan stylecolor:#999999{/spanspan stylecolor:#f1fa8cnum/spanspan stylecolor:#999999:/span span stylecolor:#f1fa8c2/spanspan stylecolor:#999999,/span span stylecolor:#f1fa8cname/spanspan stylecolor:#999999:/spanspan stylecolor:#f1fa8c小明/spanspan stylecolor:#999999}/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 3.使用进程对象启动进程执行指定任务/spansing_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spandance_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 2.5 获取进程编号 1作用 当程序中进程的数量越来越多时如果没有办法区分主进程和子进程还有不同的子进程,那么就无法进行有效的进程管理,为了方便管理实际上每个进程都是有自己的编号。 2获取进程编号的两种方式 1获取当前进程编号 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span ososspan stylecolor:#999999./spangetpidspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 2获取当前父进程编号 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span ososspan stylecolor:#999999./spangetppidspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 3例子 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#6272a4# 1.导入进程包/span span stylecolor:#ff79c6import/span os span stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span multiprocessingspan stylecolor:#6272a4# 唱歌/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fdsing/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999,/span namespan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌进程编号:/spanspan stylecolor:#999999,/span osspan stylecolor:#999999./spangetpidspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌进程的父进程:/spanspan stylecolor:#999999,/span osspan stylecolor:#999999./spangetppidspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spannamespan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 延迟0.5秒/spanspan stylecolor:#6272a4# 跳舞/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fddance/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999,/span namespan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞进程编号:/spanspan stylecolor:#999999,/span osspan stylecolor:#999999./spangetpidspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞进程的父进程:/spanspan stylecolor:#999999,/span osspan stylecolor:#999999./spangetppidspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spannamespan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c主进程的编号:/spanspan stylecolor:#999999,/span osspan stylecolor:#999999./spangetpidspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 2.使用进程类创建进程对象/spanspan stylecolor:#6272a4# args:使用元组方式给指定任务传参/spansing_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spansingspan stylecolor:#999999,/span argsspan stylecolor:#6272a4/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999,/span span stylecolor:#f1fa8c李华/spanspan stylecolor:#999999)/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# kwargs:使用字典方式给指定任务传参/spandance_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spandancespan stylecolor:#999999,/span kwargsspan stylecolor:#6272a4/spanspan stylecolor:#999999{/spanspan stylecolor:#f1fa8cnum/spanspan stylecolor:#999999:/span span stylecolor:#f1fa8c2/spanspan stylecolor:#999999,/span span stylecolor:#f1fa8cname/spanspan stylecolor:#999999:/spanspan stylecolor:#f1fa8c小明/spanspan stylecolor:#999999}/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 3.使用进程对象启动进程执行指定任务/spansing_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spandance_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 2.6 进程的注意事项 1主进程会等待所有的子进程完成才结束 如下图所示打开QQ时会创建一个主进程而QQ里面有两个子进程。主进程会等待所有的子进程完成才结束 下面看一个例子 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span multiprocessingspan stylecolor:#ff79c6def/span span stylecolor:#8be9fdwork/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 子进程会工作2秒钟/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c10/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c工作中.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.2/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanwork_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spanworkspan stylecolor:#999999)/spanwork_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 主进程睡眠1秒/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c1/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c主进程执行完了.../spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 我们发现虽然打印了主进程执行完了但是程序还没有结束这就说明主进程会等待所有的子进程完成才结束。 但是我们都知道当我们把QQ的主进程关闭时子进程都结束了。那怎么做才能当主进程结束时子进程也结束了呢 2设置守护主进程 这个就是说每一个子进程都守护主进程当主进程结束了之后子进程直接结束也就是被销毁。 只需要加一句话 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonwork_processspan stylecolor:#999999./spandaemon span stylecolor:#6272a4/span span stylecolor:#8be9fdTrue/span span stylecolor:#6272a4# 设置子进程 守护 主进程/span /code/span/span/span/span 看个完整的例子 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span multiprocessingspan stylecolor:#ff79c6def/span span stylecolor:#8be9fdwork/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 子进程会工作2秒钟/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c10/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c工作中.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.2/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanwork_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spanworkspan stylecolor:#999999)/spanwork_processspan stylecolor:#999999./spandaemon span stylecolor:#6272a4/span span stylecolor:#8be9fdTrue/span span stylecolor:#6272a4# 设置子进程 守护 主进程/spanwork_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 主进程睡眠1秒/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c1/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c主进程执行完了.../spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 2.7 多进程-案例 1需求分析 2实现步骤 3文件的拷贝函数实现步骤 4实现代码 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span os span stylecolor:#ff79c6import/span multiprocessingspan stylecolor:#ff79c6def/span span stylecolor:#8be9fdcopy_file/spanspan stylecolor:#999999(/spanfile_namespan stylecolor:#999999,/span source_dirspan stylecolor:#999999,/span dest_dirspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 1.拼接源文件路径和目标文件路径/spansource_path span stylecolor:#6272a4/span source_dir span stylecolor:#6272a4/span span stylecolor:#f1fa8c//span span stylecolor:#6272a4/span file_namedest_path span stylecolor:#6272a4/span dest_dir span stylecolor:#6272a4/span span stylecolor:#f1fa8c//span span stylecolor:#6272a4/span file_namespan stylecolor:#6272a4# 2.打开源文件和目标文件/spanspan stylecolor:#ff79c6with/span span stylecolor:#f1fa8copen/spanspan stylecolor:#999999(/spansource_pathspan stylecolor:#999999,/span span stylecolor:#f1fa8crb/spanspan stylecolor:#999999)/span span stylecolor:#ff79c6as/span source_filespan stylecolor:#999999:/spanspan stylecolor:#ff79c6with/span span stylecolor:#f1fa8copen/spanspan stylecolor:#999999(/spandest_pathspan stylecolor:#999999,/span span stylecolor:#f1fa8cwb/spanspan stylecolor:#999999)/span span stylecolor:#ff79c6as/span dest_filespan stylecolor:#999999:/spanspan stylecolor:#6272a4# 3.循环读取源文件到目标文件/spanspan stylecolor:#ff79c6while/span span stylecolor:#8be9fdTrue/spanspan stylecolor:#999999:/spandata span stylecolor:#6272a4/span source_filespan stylecolor:#999999./spanreadspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c1024/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span dataspan stylecolor:#999999:/span span stylecolor:#6272a4# 没到文件的最后一行/spandest_filespan stylecolor:#999999./spanwritespan stylecolor:#999999(/spandataspan stylecolor:#999999)/spanspan stylecolor:#ff79c6else/spanspan stylecolor:#999999:/span span stylecolor:#6272a4# 为空则说明到最后一行/spanspan stylecolor:#ff79c6break/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 1.定义源文件夹和目标文件夹/spansource_dir span stylecolor:#6272a4/span rspan stylecolor:#f1fa8cpython视频/spandest_dir span stylecolor:#6272a4/span rspan stylecolor:#f1fa8c/home/python/桌面/test/spanspan stylecolor:#6272a4# 2.创建目标文件夹/spanspan stylecolor:#ff79c6try/spanspan stylecolor:#999999:/spanosspan stylecolor:#999999./spanmkdirspan stylecolor:#999999(/spandest_dirspan stylecolor:#999999)/spanspan stylecolor:#ff79c6except/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c目标文件夹已经存在未创建/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 3.读取源文件的文件列表/spanfile_list span stylecolor:#6272a4/span osspan stylecolor:#999999./spanlistdirspan stylecolor:#999999(/spansource_dirspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 4.遍历文件列表实现拷贝/spanspan stylecolor:#ff79c6for/span file_name span stylecolor:#ff79c6in/span file_listspan stylecolor:#999999:/spanspan stylecolor:#6272a4# copy_file(file_name, source_dir,dest_dir) # 这个实现是单任务的拷贝/spanspan stylecolor:#6272a4# 5.使用多进程实现多任务拷贝/spansub_process span stylecolor:#6272a4/span multiprocessingspan stylecolor:#999999./spanProcessspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spancopy_filespan stylecolor:#999999,/spanargsspan stylecolor:#6272a4/spanspan stylecolor:#999999(/spanfile_namespan stylecolor:#999999,/span source_dirspan stylecolor:#999999,/span dest_dirspan stylecolor:#999999)/spanspan stylecolor:#999999)/spansub_processspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 三、线程 3.1 线程的介绍 进程是分配资源的最小单位一旦创建一个进程就会分配一 定的资源就像跟两个人聊QQ就需要打开两个QQ软件一样是比较浪费资源的。线程是程序执行的最小单位实际上进程只负责分配资源而利用这些资源执行程序的是线程也就说进程是线程的容器。一个进程中最少有一一个线程来负责执行程序同时线程自己不拥有系统资源只需要一点儿在运行中必不可少的资源但它可与同属一个进程的其它线程共享进程所拥有的全部资源。这就像通过一个QQ软件(一个进程)打开两个窗口(两个线程)跟两个人聊天一样实现多任务的同时也节省了资源。 3.2 多线程的作用 将上图中的程序使用多线程实现怎么做呢为此我们先看一下单线程是怎么实现的 如下图单线程是按照顺序实现的也就是说进程中默认有一个线程用来执行程序我们称之为主线程。 如何使用多线程实现呢和前面的进程一样用主线程执行func_a再创建一个子线程执行func_b。 3.3 多线程实现多任务 1线程的创建步骤 1、导入线程包 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span threading /code/span/span/span/span 2、通过线程类创建线程对象 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-python线程对象 span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/span任务名span stylecolor:#999999)/span /code/span/span/span/span 3、启动线程执行任务 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-python线程对象span stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 2多进程例子 下面程序是单线程先执行唱歌的函数再执行跳舞的函数。需要3秒完成。 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span timespan stylecolor:#6272a4# 唱歌/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fdsing/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 延迟0.5秒/span span stylecolor:#6272a4# 跳舞/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fddance/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spansingspan stylecolor:#999999(/spanspan stylecolor:#999999)/spandancespan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 上面的程序怎么使用多线程实现呢下面的程序实现了多线程实现多任务我们会发现只需要1.5秒执行完了唱歌和跳舞是交替执行的。 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#6272a4# 1.导入进程包/span span stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span threadingspan stylecolor:#6272a4# 唱歌/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fdsing/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 延迟0.5秒/spanspan stylecolor:#6272a4# 跳舞/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fddance/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 2.使用进程类创建进程对象/spansing_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spansingspan stylecolor:#999999)/spandance_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spandancespan stylecolor:#999999)/spanspan stylecolor:#6272a4# 3.使用进程对象启动进程执行指定任务/spansing_threadspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spandance_threadspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 3.4 线程执行带有参数的任务 1参数说明 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-python进程对象 span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/span任务名span stylecolor:#999999,/span argsspan stylecolor:#999999,/span kwargsspan stylecolor:#999999)/span /code/span/span/span/span 2例子 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#6272a4# 1.导入进程包/span span stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span threadingspan stylecolor:#6272a4# 唱歌/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fdsing/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999,/span namespan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spannamespan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c唱歌.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 延迟0.5秒/spanspan stylecolor:#6272a4# 跳舞/span span stylecolor:#ff79c6def/span span stylecolor:#8be9fddance/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999,/span namespan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spannumspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spannamespan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c跳舞.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.5/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 2.使用进程类创建进程对象/spanspan stylecolor:#6272a4# args:使用元组方式给指定任务传参/spansing_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spansingspan stylecolor:#999999,/span argsspan stylecolor:#6272a4/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c3/spanspan stylecolor:#999999,/span span stylecolor:#f1fa8c李华/spanspan stylecolor:#999999)/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# kwargs:使用字典方式给指定任务传参/spandance_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spandancespan stylecolor:#999999,/span kwargsspan stylecolor:#6272a4/spanspan stylecolor:#999999{/spanspan stylecolor:#f1fa8cnum/spanspan stylecolor:#999999:/span span stylecolor:#f1fa8c2/spanspan stylecolor:#999999,/span span stylecolor:#f1fa8cname/spanspan stylecolor:#999999:/spanspan stylecolor:#f1fa8c小明/spanspan stylecolor:#999999}/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 3.使用进程对象启动进程执行指定任务/spansing_threadspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spandance_threadspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 3.5 主线程和子线程的结束顺序 1主线程会等待所有的子线程完成才结束 下面的例子说明了主线程会等待所有的子线程完成才结束。 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span threadingspan stylecolor:#ff79c6def/span span stylecolor:#8be9fdwork/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 子进程会工作2秒钟/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c10/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c工作中.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.2/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanwork_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spanworkspan stylecolor:#999999)/spanwork_threadspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 主进程睡眠1秒/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c1/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c主线程执行完了.../spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 我们发现虽然打印了主线程执行完了但是程序还没有结束这就说明主线程会等待所有的子线程完成才结束。 但是我们希望主线程结束了则所有的子线程都结束那怎么做呢接着看 2设置守护主线程 方法一 只需要加一句话 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonwork_processspan stylecolor:#999999./spandaemon span stylecolor:#6272a4/span span stylecolor:#8be9fdTrue/span span stylecolor:#6272a4# 设置子线程 守护 主进程/span /code/span/span/span/span 方法二 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonwork_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spanworkspan stylecolor:#999999,/span daemonspan stylecolor:#6272a4/spanspan stylecolor:#8be9fdTrue/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 设置子线程 守护 主进程/span /code/span/span/span/span 看个完整的例子 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span time span stylecolor:#ff79c6import/span threadingspan stylecolor:#ff79c6def/span span stylecolor:#8be9fdwork/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 子进程会工作2秒钟/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c10/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c工作中.../spanspan stylecolor:#999999)/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c0.2/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 方法一/spanwork_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spanworkspan stylecolor:#999999,/span daemonspan stylecolor:#6272a4/spanspan stylecolor:#8be9fdTrue/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 设置子进程 守护 主进程/spanspan stylecolor:#6272a4# 方法二/spanwork_threadspan stylecolor:#999999./spandaemon span stylecolor:#6272a4/span span stylecolor:#8be9fdTrue/span span stylecolor:#6272a4# 设置子进程 守护 主进程/spanwork_threadspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 主进程睡眠1秒/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c1/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c主线程执行完了.../spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 3.6 线程间的执行顺序 1线程间的执行是无序的 下图是一个进程创建的三个线程这三个线程的执行顺序是无序的与创建的顺序无关它与操作系统的调度有关。 看一个例子 2例子 我们发现运行的结果和线程的创建顺序并不一样所以证明线程间的执行是无序的。 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span threading span stylecolor:#ff79c6import/span timespan stylecolor:#ff79c6def/span span stylecolor:#8be9fdtask/spanspan stylecolor:#999999(/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/spantimespan stylecolor:#999999./spansleepspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c1/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 延迟一秒/spanspan stylecolor:#6272a4# current_thread:获取当前线程的对象/spanthread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spancurrent_threadspan stylecolor:#999999(/spanspan stylecolor:#999999)/span span stylecolor:#6272a4# 获取当前的线程/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanthreadspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6for/span i span stylecolor:#ff79c6in/span span stylecolor:#f1fa8crange/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c5/spanspan stylecolor:#999999)/spanspan stylecolor:#999999:/span span stylecolor:#6272a4# 创建5个线程/spansub_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spantaskspan stylecolor:#999999)/spansub_threadspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 运行结果 3.7 多线程-案例 1需求分析 2实现 由于实现的步骤和多进程是一样的所有接下来直接看代码注释在代码中 span stylecolor:rgba(0, 0, 0, 0.75)span stylebackground-color:#ffffffspan stylecolor:#000000span stylebackground-color:#282a36code classlanguage-pythonspan stylecolor:#ff79c6import/span os span stylecolor:#ff79c6import/span threading span stylecolor:#ff79c6def/span span stylecolor:#8be9fdcopy_file/spanspan stylecolor:#999999(/spanfile_namespan stylecolor:#999999,/span source_dirspan stylecolor:#999999,/span dest_dirspan stylecolor:#999999)/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 1.拼接源文件路径和目标文件路径/spansource_path span stylecolor:#6272a4/span source_dir span stylecolor:#6272a4/span span stylecolor:#f1fa8c//span span stylecolor:#6272a4/span file_namedest_path span stylecolor:#6272a4/span dest_dir span stylecolor:#6272a4/span span stylecolor:#f1fa8c//span span stylecolor:#6272a4/span file_namespan stylecolor:#6272a4# 2.打开源文件和目标文件/spanspan stylecolor:#ff79c6with/span span stylecolor:#f1fa8copen/spanspan stylecolor:#999999(/spansource_pathspan stylecolor:#999999,/span span stylecolor:#f1fa8crb/spanspan stylecolor:#999999)/span span stylecolor:#ff79c6as/span source_filespan stylecolor:#999999:/spanspan stylecolor:#ff79c6with/span span stylecolor:#f1fa8copen/spanspan stylecolor:#999999(/spandest_pathspan stylecolor:#999999,/span span stylecolor:#f1fa8cwb/spanspan stylecolor:#999999)/span span stylecolor:#ff79c6as/span dest_filespan stylecolor:#999999:/spanspan stylecolor:#6272a4# 3.循环读取源文件到目标文件/spanspan stylecolor:#ff79c6while/span span stylecolor:#8be9fdTrue/spanspan stylecolor:#999999:/spandata span stylecolor:#6272a4/span source_filespan stylecolor:#999999./spanreadspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c1024/spanspan stylecolor:#999999)/spanspan stylecolor:#ff79c6if/span dataspan stylecolor:#999999:/span span stylecolor:#6272a4# 没到文件的最后一行/spandest_filespan stylecolor:#999999./spanwritespan stylecolor:#999999(/spandataspan stylecolor:#999999)/spanspan stylecolor:#ff79c6else/spanspan stylecolor:#999999:/span span stylecolor:#6272a4# 为空则说明到最后一行/spanspan stylecolor:#ff79c6break/spanspan stylecolor:#ff79c6if/span __name__ span stylecolor:#6272a4/span span stylecolor:#f1fa8c__main__/spanspan stylecolor:#999999:/spanspan stylecolor:#6272a4# 1.定义源文件夹和目标文件夹/spansource_dir span stylecolor:#6272a4/span rspan stylecolor:#f1fa8cpython视频/spandest_dir span stylecolor:#6272a4/span rspan stylecolor:#f1fa8c/home/python/桌面/test/spanspan stylecolor:#6272a4# 2.创建目标文件夹/spanspan stylecolor:#ff79c6try/spanspan stylecolor:#999999:/spanosspan stylecolor:#999999./spanmkdirspan stylecolor:#999999(/spandest_dirspan stylecolor:#999999)/spanspan stylecolor:#ff79c6except/spanspan stylecolor:#999999:/spanspan stylecolor:#ff79c6print/spanspan stylecolor:#999999(/spanspan stylecolor:#f1fa8c目标文件夹已经存在未创建/spanspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 3.读取源文件的文件列表/spanfile_list span stylecolor:#6272a4/span osspan stylecolor:#999999./spanlistdirspan stylecolor:#999999(/spansource_dirspan stylecolor:#999999)/spanspan stylecolor:#6272a4# 4.遍历文件列表实现拷贝/spanspan stylecolor:#ff79c6for/span file_name span stylecolor:#ff79c6in/span file_listspan stylecolor:#999999:/spanspan stylecolor:#6272a4# copy_file(file_name, source_dir,dest_dir) # 这个实现是单任务的拷贝/spanspan stylecolor:#6272a4# 5.使用多线程实现多任务拷贝/spansub_thread span stylecolor:#6272a4/span threadingspan stylecolor:#999999./spanThreadspan stylecolor:#999999(/spantargetspan stylecolor:#6272a4/spancopy_filespan stylecolor:#999999,/spanargsspan stylecolor:#6272a4/spanspan stylecolor:#999999(/spanfile_namespan stylecolor:#999999,/span source_dirspan stylecolor:#999999,/span dest_dirspan stylecolor:#999999)/spanspan stylecolor:#999999)/spansub_threadspan stylecolor:#999999./spanstartspan stylecolor:#999999(/spanspan stylecolor:#999999)/span /code/span/span/span/span 四、进程和线程对比 4.1 关系对比 4.2 区别对比 4.3 优缺点对比
http://www.hkea.cn/news/14519631/

相关文章:

  • 摄影网站设计实现步骤智能模板网站建设哪家好
  • 做淘客网站备案品牌购物平台有哪些
  • 网站加入搜索引擎怎么做淮南便民网
  • 网站开发技术分享ppt网络推广优化招聘
  • WordPress如何添加表情东莞关键词优化软件
  • 南昌网站制作代理商电子商城网站建议书
  • 展览网站建设网络经营网址怎么注册
  • 网站推广分销系统做黑界头像网站
  • 建设工程挂网是在那个网站网站建设及维护费
  • 哪个网站的ppt模板最好dede怎么做双语网站
  • 网络编程就是做网站么电脑软件推广
  • 城乡建设管理局网站石家庄软件定制开发
  • 工信部icp网站备案查询免费建站哪个最好
  • 南京手机网站设计wordpress 404页面模板
  • 传统设计公司网站高质量内容的重要性
  • 网站描述案例威联通做网站
  • 品牌服装网站建设现状wordpress 图片轮换
  • 货运 东莞网站建设郑州网站制作开发
  • 西安网站策划东莞外网搭建公司
  • 乐山市规划和建设局网站宣城网站 建设
  • 南京电子商务网站开发公司模板网站是什么意思
  • 做视频的网站带模板下载淘宝网网页版登录平台
  • 凯里有哪些网站开发公司企企网官网
  • 98元建网站软件定制为什么不给源码
  • wordpress模板自适应修改邢台seo技术
  • 免费注册域名网站商务网站需求说明书
  • 免费的网站域名如何做好营销推广
  • 南开做网站如何降低网站跳出率
  • 网站建设企业熊掌号设计师常用的灵感网站
  • 如何做销售直播网站阿里云网站开发工具