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

铜煤建设网站丰台路网站建设

铜煤建设网站,丰台路网站建设,做网站用哪个预装系统,建购物网站难吗_thread模块除了可以派生线程外#xff0c;还提供了基本的同步数据结构#xff0c;又称为锁对象#xff08;lock object#xff0c;也叫原语锁、简单锁、互斥锁、互斥和二进制信号量#xff09;。 下面是常用的线程函数#xff1a; 函数描述start_new_thread(function,…_thread模块除了可以派生线程外还提供了基本的同步数据结构又称为锁对象lock object也叫原语锁、简单锁、互斥锁、互斥和二进制信号量。 下面是常用的线程函数 函数描述start_new_thread(function,args,kwargsNone)派生一个新的线程使用给定的args和可选的kwargs来执行functionallocate_lock()分配LockType对象exit()退出线程指令LockType锁对象的方法acquire(waitNone)尝试获取锁对象locked()如果获取了锁对象则返回True否则返回Falserelease()释放锁 _thread模块的核心函数是start_new_thread()。专门用来派生新的线程。 我们对上节文章的onethr.py文件稍作修改 #!/usr/bin/env pythonimport _thread from time import sleep,ctimedef loop0():print(开始循环0次在,ctime())sleep(4)print(结束循环0次在,ctime())def loop1():print(开始循环1次在,ctime())sleep(2)print(结束循环1次在,ctime()) def main():print(开始于,ctime())loop0()loop1()print(所有的任务都完成于,ctime())def main():print(starting at:, ctime())_thread.start_new_thread(loop0, ())_thread.start_new_thread(loop1, ())sleep(6)print(all done at:, ctime())if __name__ __main__:main( 执行该脚本三遍结果 PS C:\Users\WC python E:\Python3.6.3\workspace\mtsleepA.py starting at: Mon Mar 26 21:56:10 2018 开始循环1次在 Mon Mar 26 21:56:10 2018 开始循环0次在 Mon Mar 26 21:56:10 2018 结束循环1次在 Mon Mar 26 21:56:12 2018 结束循环0次在 Mon Mar 26 21:56:14 2018 all done at: Mon Mar 26 21:56:16 2018 PS C:\Users\WC python E:\Python3.6.3\workspace\mtsleepA.py starting at: Mon Mar 26 22:00:43 2018 开始循环0次在 Mon Mar 26 22:00:43 2018 开始循环1次在 Mon Mar 26 22:00:43 2018 结束循环1次在 Mon Mar 26 22:00:45 2018 结束循环0次在 Mon Mar 26 22:00:47 2018 all done at: Mon Mar 26 22:00:49 2018 PS C:\Users\WC python E:\Python3.6.3\workspace\mtsleepA.py starting at: Mon Mar 26 22:00:56 2018 开始循环0次在 Mon Mar 26 22:00:56 2018 开始循环1次在 Mon Mar 26 22:00:56 2018 结束循环1次在 Mon Mar 26 22:00:58 2018 结束循环0次在 Mon Mar 26 22:01:00 2018 all done at: Mon Mar 26 22:01:02 2018 由上面的代码可知start_new_thread()必须包含两个参数即使要执行的函数不需要参数也要传递一个空元组。 我们注意到loop0还是loop1开始的顺序竟然可以是无序的loop0和loop1是同时执行的loop1是在loop0之前结束的整个程序一共耗时6秒。 我们可以说loop0和loop1是并发执行的。 我们在主程序其实也就是主线程中增加了一个sleep(6)的语句这其实是为了避免主程序结束的时候loop0和loop1两个线程还没有结束的问题。这也是_thread模块的一种线程同步机制。 但是我们要说这样使用sleep()来进行线程同步是不靠谱的这也是_thread的一个弊端所在。 这时我们可以引用锁机制来实现相应的线程管理并且同时改善单独的循环函数实现方式 import _thread from time import sleep, ctime #不再把4秒和2秒硬性的编码到不同的函数中而是使用唯一的loop()函数并把这些常量放进列表loops中 loops[4,2] #代替了之前的loop*()函数三个参数分别代表了处于第几个循环中睡眠时间和锁对象。每个循环执行到最后一句的时候释放锁对象告诉主线程该线程已完成 def loop(nloop,sec,lock):print(开始循环,nloop,在,ctime())sleep(sec)print(循环,nloop ,结束于,ctime())lock.release()def main():print(开始于,ctime())locks[]nloopsrange(len(loops))#第一个for循环中创建了一个锁的列表通过thread.allocate_lock()方法得到锁对象再通过acquire()方法取到锁相当于把锁锁上取到之后就可以把它添加到锁列表locks中。for i in nloops:lock_thread.allocate_lock()lock.acquire()locks.append(lock)#第二个for循环中主要用于派生线程。每个线程都会调用loop()函数并传递循环号、睡眠时间以及用于该线程的锁。 for i in nloops:_thread.start_new_thread(loop,(i,loops[i],locks[i]))#第三个for循环按照顺序检查每个锁。每个线程执行完毕后都会释放自己的锁对象。这里使用忙等待让主线程等所有的锁都释放后才继续执行for i in nloops:while locks[i].locked():passprint(所有的任务完成于,ctime())if __name__ __main__:main() 执行结果 开始循环 1 在 Mon Mar 26 22:49:25 2018 开始循环 0 在 Mon Mar 26 22:49:25 2018 循环 1 结束于 Mon Mar 26 22:49:27 2018 循环 0 结束于 Mon Mar 26 22:49:29 2018 所有的任务完成于 Mon Mar 26 22:49:29 2018 上述结果除了表名两次循环是并发执行的之外整个程序一共用时4秒而不是之前的6秒。
http://www.dnsts.com.cn/news/234486.html

相关文章:

  • 网站多语言包哪里有做网站推广的
  • 购物网站建设精英哪家专门做特卖的网站
  • 深圳app开发网站建设衡阳微信网站开发
  • 做产品网站营销推广源汇区建设局网站
  • 做投资的网站做家具定制的设计网站
  • 网站建设 毕业设计新密市城乡建设局网站
  • 基于p2p的网站建设珠海市建设工程造价协会网站
  • 怎么用自己主机做网站网站建设咨询服务合同
  • 宁波哪个公司建网站旅游网站需求分析
  • 湖北省建设厅官方网站文件运城建设银行网站点
  • 加强网站建设技术培训乐清网页制作哪家好
  • 网站认证空间网站二级目录建站
  • 在手机上建设网站教程排名优化哪家专业
  • 沙坪坝做网站网站打开太慢
  • 用什么软件做网站设计找销售的网站
  • 查询建设用地规划许可证在哪个网站青岛网站建设公司招聘
  • 美橙互联同类型网站与网站建立的链接不安全怎么办
  • 站台建筑北京网站备案注销
  • 亚马逊网站建设进度计划wordpress怎么做相关相似文章链接
  • 自己做博客网站建设网站运营方案
  • wordpress登录插件郑州网站seo分析
  • 网站开发项目说明书python编程语言的特点
  • 做网站开发 用什么装修网站怎么做推广
  • 怎么给网站做跳转公司注册地址可以跨市迁移吗
  • 麓谷网站建设php网站开发招聘
  • 天津做网站建设广西壮族自治区简称
  • 电子商务网站设计原理知识点龙采哈尔滨建站公司
  • 网站诊断网站seo诊断wordpress更新机制
  • 黄山网站建设电话网页链接的视频怎么下载
  • 做网站的前期准备网站模板免费