# 多线程实例

# 例1.单线程
from time import sleep,ctime
def task1(taskName):
for i in range(2):
print("正在执行 %s %s"%(taskName,ctime()))
sleep(2)

def task2(taskName):
for i in range(2):
print("正在执行 %s %s"%(taskName,ctime()))
sleep(1)

if __name__ == '__main__':
task1("任务一")
task2("任务二")

# 例2
from time import sleep,ctime
def task(taskName,time):
for i in range(2):
print("正在执行 %s %s"%(taskName,ctime()))
sleep(time)

if __name__ == '__main__':
task("任务一",2)
task("任务二",1)

if __name__ == '__main__':
task("任务一",2)
task("任务二",1)

# 例3 引入线程
from time import sleep,ctime
import threading #引入线程模块
def task(taskName,time):
for i in range(2):
print("正在执行 %s %s"%(taskName,ctime()))
sleep(time)

#将所有线程组装到threads中
threads = []

#将任务存放置线程中
t1 = threading.Thread(target=task,args=("任务一",2))
t2 = threading.Thread(target=task,args=("任务二",1))
threads.append(t1)
threads.append(t2)

if __name__ == '__main__':
#启动线程 start()
for i in threads:
i.start()
#结束主线程
print("结束主线程%s"%ctime())

# 4.多线程 --守护线程join()
from time import sleep,ctime
import threading #引入线程模块
def task(taskName,time):
for i in range(2):
print("正在执行 %s %s"%(taskName,ctime()))
sleep(time)

#将所有线程组装到threads中
threads = []
#将任务存放置线程中
t1 = threading.Thread(target=task,args=("任务一",2))
t2 = threading.Thread(target=task,args=("任务二",1))
threads.append(t1)
threads.append(t2)

if __name__ == '__main__':
#启动线程 start()
for i in threads:
i.start()
#守护进程 join()
for i in threads:
i.join()
#结束主线程
print("结束主线程%s"%ctime())

# 例5 优化线程的创建 批量生成线程
from time import sleep,ctime
import threading #引入线程模块
def task(taskName,time):
for i in range(2):
print("正在执行 %s %s"%(taskName,ctime()))
sleep(time)
#定义存储所有任务的列表
tasks = [("任务一",2),("任务二",1)]
#将所有线程组装到threads中
threads = []

#批量生成线程
def createThread():
for taskName,time in tasks:
t1 = threading.Thread(target=task,args=(taskName,time))
threads.append(t1)

if __name__ == '__main__':
#批量生成线程
createThread()
#启动线程 start()
for i in threads:
i.start()
#守护进程 join()
for i in threads:
i.join()
#结束主线程
print("结束主线程%s"%ctime())

# 例6 根据用户输入的任务和时间,批量生成线程
from time import sleep,ctime
import threading #引入线程模块
def task(taskName,time):
for i in range(2):
print("正在执行 %s %s"%(taskName,ctime()))
sleep(time)

#定义存储所有任务的列表
# tasks = [("任务一",2),("任务二",1)]
tasks = []
#接收用户输入的任务名和时长,追加到tasks中
def rectask(taskName,time):
tasks.append((taskName,time))

#将所有线程组装到threads中
threads = []

#创建批量生成线程
def createThread():
for taskName,time in tasks:
t1 = threading.Thread(target=task,args=(taskName,time))
threads.append(t1)

if __name__ == '__main__':
nums = int(input('请输入你要执行的任务次数:'))
for i in range(nums): #range(2) 0,1
taskName = input("请输入第%s任务名称"%(i+1))
time = int(input("请输入第%s任务执行的时长"%(i+1)))
#将任务和时长组装到tasks列表中
rectask(taskName,time)
#批量生成线程
createThread()
#启动线程 start()
for i in threads:
i.start()
#守护进程 join()
for i in threads:
i.join()
#结束主线程
print("结束主线程%s"%ctime())

python基础之多线程的操作的更多相关文章

  1. python基础之多线程与多进程(二)

    上课笔记整理: 守护线程的作用,起到监听的作用 一个函数连接数据库 一个做守护线程,监听日志 两个线程同时取一个数据 线程---->线程安全---->线程同时进行操作数据. IO操作--- ...

  2. python基础之多线程与多进程(一)

    并发编程? 1.为什么要有操作系统? 操作系统,位于底层硬件与应用软件之间 工作方式:向下管理硬件,向上提供接口 2.多道技术? 不断切换程序. 操作系统进程切换: 1.出现IO操作 2.固定时间 进 ...

  3. python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  4. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  5. python基础之os模块操作

    # os模块 目录相关内置库import os# . 当前目录 .. 返回上一级目录# 1. os.path.abspath() --获取当前文件的绝对路径(不包含os模块.py) pwd# path ...

  6. python基础学习之文件操作&函数

    1.文件处理相关 1.编码问题 ①python2与python3中的默认编码: py2默认使用ASCII码,py3默认使用utf-8 ②为什么会出现中文乱码,中文乱码的情况有哪些? #sys.stdo ...

  7. python基础之多线程锁机制

    GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...

  8. python 基础之文件读操作

    创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...

  9. python基础知识-day7(文件操作)

    1.文件IO操作: 1)操作文件使用的函数是open() 2)操作文件的模式: a.r:读取文件 b.w:往文件里边写内容(先删除文件里边已有的内容) c.a:是追加(在文件基础上写入新的内容) d. ...

随机推荐

  1. Turing渲染着色器网格技术分析

    Turing渲染着色器网格技术分析 图灵体系结构通过使用 网格着色器 引入了一种新的可编程几何着色管道.新的着色器将计算编程模型引入到图形管道中,因为协同使用线程在芯片上直接生成紧凑网格( meshl ...

  2. NVIDIA安培架构

    NVIDIA安培架构 NVIDIA Ampere Architecture In-Depth 在2020年英伟达GTC主题演讲中,英伟达创始人兼首席执行官黄仁勋介绍了基于新英伟达安培GPU架构的新英伟 ...

  3. ADAS处理器集成功能安全单片机MCU

    ADAS处理器集成功能安全单片机MCU ADAS processors integrate functional safety MCU 拉斯维加斯-德州仪器公司引进了ADAS和网关处理器TDA4VM和 ...

  4. 重新整理 .net core 实践篇—————中间件[十九]

    前言 简单介绍一下.net core的中间件. 正文 官方文档已经给出了中间件的概念图: 和其密切相关的是下面这两个东西: IApplicationBuilder 和 RequestDelegate( ...

  5. Echarts的使用教程

    项目中需要使用图表,最初使用的.NET自带的MSChart控件,做出来的效果不太好,所以又使用了Echarts控件. MSChart源码放在最后,可自行下载查看. Echarts是一个基于 JavaS ...

  6. 生成树协议(STP)

    一.交换网络环路的产生 1.广播风暴的形成 2.多帧复制 3.MAC地址表紊乱 二.STP简介 STP-Spanning Tree Protocol(生成树协议) 逻辑上断开环路,防止广播风暴的产生 ...

  7. 学习响应式编程 Reactor (3) - reactor 基础

    Reactor Reactor 项目的主要 artifact 是 reactor-core,这是一个基于 Java 8 的实现了响应式流规范的响应式库. Reactor 提供了实现 Publisher ...

  8. 屌炸天,像写代码一样写PPT,一个小工具解决

    此文已经废,请移步升级版博文: markdown写ppt (史上最全)

  9. springcloud webflux

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  10. 对图数据库(Nebula)进行单元测试时的坑

    通过Nebula提供的Java Client完成代码开发后,使用JUnit对其进行单元测试,需要注意几点: 一.不确定性 1.Nebula创建图空间是异步实现的,Nebula将在下一个心跳周期内(默认 ...