# 多线程实例

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

最新文章

  1. 净捡软柿子捏--jQuery 遍历方法
  2. 渡轮问题Ship
  3. 修改ubuntu DNS的步骤/wget url报错: unable to resolve host address的解决方法
  4. javascript unit testing
  5. maven学习笔记(定制一个Web项目)
  6. hive0.13网络接口安装
  7. USACO Section 2.3: Controlling Companies
  8. Android API 文档 离线秒开方法
  9. Inno Setup打包注意事项
  10. mysql中配置ssl_key、ssl-cert、ssl-ca的路径及建立ssl连接
  11. 023_supervisorctl管理服务注意事项
  12. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Saratov
  13. 关于Dubbo和Spring异步注解@Async的冲突
  14. 使用Git上传项目到Gitee
  15. QLabel-标签控件的应用
  16. Ubuntu菜鸟入门(十八)————解决Ubuntu下Sublime Text 3无法输入中文
  17. python day10作业
  18. MATLAB总结二
  19. haproxy+keepalived原理特点
  20. vue--父组件主动获取子组件的方法

热门文章

  1. GitHub上YOLOv5开源代码的训练数据定义
  2. Solon Auth 认证框架使用演示(更简单的认证框架)
  3. Django框架之路由层汇总
  4. HTML基本标签及语法
  5. 【VBA】判断文件是否存在
  6. 『无为则无心』Python基础 — 2、编译型语言和解释型语言的区别
  7. vue根据变量值绑定src的路径
  8. 【贪心】8.29题解-cut
  9. Spring Cloud专题之三:Hystrix
  10. js笔记9