# 多线程实例

# 例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. Kaggle上的犬种识别(ImageNet Dogs)

    Kaggle上的犬种识别(ImageNet Dogs) Dog Breed Identification (ImageNet Dogs) on Kaggle 在本节中,将解决在Kaggle竞赛中的犬种 ...

  2. 开源电路分享のFalling Star Board

    设计初衷 想自己做个能连网的时钟,结合RT-thread,显示个天气预报什么的,想想就挺有趣的.考虑到当前的芯片价格,和后续的设计,万一还有个啥奇妙的想法呢,就把这个做成了核心板. 一开始就只做了最小 ...

  3. eclipse解决中文乱码

    参考链接:https://blog.csdn.net/lzc2644481789/article/details/97244261

  4. Flink实时计算pv、uv的几种方法

    本文首发于:Java大数据与数据仓库,Flink实时计算pv.uv的几种方法 实时统计pv.uv是再常见不过的大数据统计需求了,前面出过一篇SparkStreaming实时统计pv,uv的案例,这里用 ...

  5. list 分批导入db, 每1000条数据一批 , 从字符串中获取数字,小数, 版本号比较

    //这个有个弊端: 分组后分批导入, 是阻塞的,我没有导入完成,别人就不能导入, 这里可以优化成异步,线程池 public static void main(String[] args) { Rand ...

  6. 【Azure 环境】由为存储账号(Storage Account)拒绝分配权限而引出的Azure 蓝图(Blueprint)使用问题

    问题描述 当打开Azure存储账号(Storage Account)门户页面时,从 "访问控制(标识和访问管理)" 页面中发现有"拒绝分配"的功能,所以就思考, ...

  7. 一个线上 Maven 诡异问题排查过程

    å. 前言 现在的大部分 Java 应用基本都是通过 Maven 进行组织的,不论是分布式应用还是单体集群应用往往都会通过一个 父 POM 加若干子 POM 完成项目的组织.然而这种多应用多模块的拆分 ...

  8. spring中BeanPostProcessor之四:AutowiredAnnotationBeanPostProcessor(01)

    在<spring中BeanPostProcessor之二:CommonAnnotationBeanPostProcessor(01)>中分析了CommonAnnotationBeanPos ...

  9. Unity触发碰撞

    原文链接:Unity触发碰撞介绍 3D触发器与碰撞器 触发信息检测: 1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器 2.MonoBeh ...

  10. Linux主机解析顺序

    1.介绍 本篇文章由于因公司项目上线,需要对项目环境进行压力测试.在压测过程中,所有打压机从公网对目标项目服务器进行压力测试,发现和内网压力测试的性能结果差距10倍左右,在调整主机对DNS的解析顺序之 ...