python中_thread模块是一个低级别的多线程模块,它的问题在于主线程运行完毕后,会立马把子线程给结束掉,不加处理地使用_thread模块是不合适的.这里把书中讲述的有关_thread使用的例子自己实现了一遍,做以记录.

#例子一:自己手动在主线程中设置等待时间import _thread
from time import ctime, sleepdef loop0():print("loop0 starts at:{}".format(ctime()))sleep(4)print("loop0 ends at:{}".format(ctime()))def loop1():print("loop1 starts at:{}".format(ctime()))sleep(2)print("loop1 ends at:{}".format(ctime()))if __name__ == "__main__":print("start_time:{}".format(ctime()))_thread.start_new_thread(loop0, ())_thread.start_new_thread(loop1, ())#此处设置sleep(6)是因为_thread主线程结束后,会马上杀死其他线程sleep(6)print("end_time:{}".format(ctime()))

#例子二:通过锁可以实现所有线程全部运行后立即退出import _thread
from time import ctime, sleep#每个loop等待的时间
wait_time_list = [4, 2]def loop(i, wait_time, lock):"""根据传入参数创建多个loop函数:param i::param wait_time::param lock::return:"""print("loop{} starts at:{}".format(i, ctime()))sleep(wait_time)print("loop{} ends at:{}".format(i, ctime()))#释放锁
    lock.release()def main():print("start_time:", ctime())nloops = range(len(wait_time_list))locks = []#创建锁,上锁for i in nloops:lock = _thread.allocate_lock()lock.acquire()locks.append(lock)#之所以另起一个循环,是为了尽量保证所有线程能够同时启动,因为上面的循环中锁的操作也要花费一些时间for i in nloops:_thread.start_new_thread(loop, (i, wait_time_list[i], locks[i]))#loop函数中的参数放到元组里#等待所有的子线程释放锁后,结束主线程.(等待时间取决于执行时间最长的子线程,假如第一个子线程执行时间最长,等它执行完毕,下面的循环就不会再进入了.)for i in nloops:#注意这里locked()要带括号while locks[i].locked():passprint("all done! end_time:", ctime())if __name__ == '__main__':main()

转载于:https://www.cnblogs.com/Stephen-Qin/p/10354071.html

python的_thread模块来实现多线程(python核心编程例子)相关推荐

  1. Python 日志logging模块初探及多线程踩坑(2)

    系列文章: Python 日志logging模块初探及多线程踩坑(1) Python 日志logging模块初探及多线程踩坑(2) 接着上面一篇文章,我们这篇来写一个多进程兼容且无损性能的 Timed ...

  2. python 命令行 模块_深入浅析Python 命令行模块 Click

    Click 是用 Python 写的一个第三方模块,用于快速创建命令行.我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argpa ...

  3. python如何退出模块_如何将一个 Python 函数进行模块化封装

    使用 Python 函数来最大程度地减少重复任务编码工作量. -- Seth Kenlon(作者) 你是否对函数.类.方法.库和模块等花哨的编程术语感到困惑?你是否在与变量作用域斗争?无论你是自学成才 ...

  4. python使用 pywin32 模块操作 excel,Python 操作 excel 系列之五

    本篇博客是 Python 操作 excel 系列的第5篇,前4篇博客阅读地址如下所示: 2022 之Python操作 Excel,xlrd 与 xlwt 模块一文掌握 Python 操作 Excel, ...

  5. python包和模块推荐_对于Python包和模块的10个常识清单

    有同砚题目对于模块与包的题目,特给新人总结的对于Python包与模块的10个常识清单. 0.一个模块(module)就是一个py文件,模块的名字就是该文件的名字(不包罗后缀) 1.一个 包(packa ...

  6. python中pygame模块下载_基于python中pygame模块的Linux下安装过程(详解)

    pyhthon中pygame模块怎么安装?pyhthon中pygame模块怎么安装?鄙人为初二一名学生,闲来无事 钻研起电这句话还是建议问一下你们代课老师吧,因为你们老师是这方面专家,诺儿那边的话肯定 ...

  7. python 如何判断一个函数执行完成_Python核心编程的四大神兽迭代器、生成器 、闭包以及装饰器...

    本文将主要分为4大部分,分别介绍Python核心编程中的迭代器.生成器 .闭包以及装饰器. 生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yiel ...

  8. python程序设计从基础到开发电子书_Python核心编程从入门到开发实战(pdf+txt+epub+azw3+mobi电子书在线阅读下载)...

    作者:朱红庆 格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT 内容简介: 本书以学会.用好 Python 语言进行软件编程为目标,不仅讲解了基本概念.数据类型.变量.运算符. ...

  9. python使用urllib模块开发的多线程豆瓣小站mp3下载器

    #! /usr/bin/python2.7 # -- coding:utf-8 -- import os, urllib,urllib2, thread,threading import re #匹配 ...

最新文章

  1. linux 下 使用wget 下载 jdk资源 命令
  2. 《算法》练习题1.1.1--1.1.39 答案解析
  3. 关于 sql语句的一些小优化
  4. 设计师更高效_如何丢掉我的工作使我成为一名更好的设计师
  5. C# IIS ManagementException: 访问遭到拒绝
  6. Linux命令之查找
  7. 亡羊补牢or防患未然?在数百套多种数据库中找出风险点(附PPT下载)
  8. LG能源解决方案去年年底已开始研发磷酸铁锂电池
  9. fragment与activity之间的通信
  10. ParaFi Capital资产管理规模超1亿美元,至少投资22家公司或协议
  11. tcm_fc自动加载 linux,[Fibre Channle 实战之四]centos7中如何添加tcm_qla2xxx支持
  12. 在MFC中通过opencv显示摄像头视频或者文件视频
  13. Django的Form另类实现SelectMultiple
  14. flex 平铺布局_Flex布局的个人见解~阮一峰的网络日志
  15. CC2530之定时器T3
  16. fit对数正态分布matlab,拟合对数正态分布使用Scipy与Matlab
  17. 100首经典广告背景音乐
  18. 计算机界面显示不完整,win10系统打开软件界面发现显示不全的方法介绍
  19. 棒约翰任命Marvin Boakye为首位首席人力官
  20. 建造者模式和桥接模式,答应我告别ifelse好吗?

热门文章

  1. 遭遇ARP欺骗的处理办法
  2. ASP.NET3种验证码[转]
  3. 安卓 激活应用组件 intent
  4. ACDSee Photo Studio Ultimate 2020中文版
  5. Python网络_TCP/IP简介
  6. python爬虫(二)_HTTP的请求和响应
  7. 荣耀 6 安装 SD 卡,提示:SD卡已安全移除
  8. ElasticSearch 2 (26) - 语言处理系列之打字或拼写错误
  9. apktool+dex2jar+jd_gui
  10. Java 学习(21)--集合笔试题