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

深圳 建设银行国际互联网站公司网络营销策略

深圳 建设银行国际互联网站,公司网络营销策略,电子工程网如何删除帖子,线上营销系统_thread模块除了可以派生线程外,还提供了基本的同步数据结构,又称为锁对象(lock object,也叫原语锁、简单锁、互斥锁、互斥和二进制信号量)。 下面是常用的线程函数: 函数描述start_new_thread(function,…

_thread模块除了可以派生线程外,还提供了基本的同步数据结构,又称为锁对象(lock object,也叫原语锁、简单锁、互斥锁、互斥和二进制信号量)。

下面是常用的线程函数:

函数描述
start_new_thread(function,args,kwargs=None)派生一个新的线程,使用给定的args和可选的kwargs来执行function
allocate_lock()分配LockType对象
exit()退出线程指令
LockType锁对象的方法
acquire(wait=None)尝试获取锁对象
locked()如果获取了锁对象则返回True,否则返回False
release()释放锁

_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=[]nloops=range(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.15wanjia.com/news/56454.html

相关文章:

  • WordPress最强网站seo优化专员
  • 图片分页网站模板360seo排名优化服务
  • 设计师a 网站免费网络推广渠道
  • 做网站一般注册哪几类商标网络营销的未来发展趋势论文
  • 临沂做网站建设的公司哪家好国内新闻热点事件
  • 网站如何做品牌宣传海报太原互联网推广公司
  • 做关于卖宠物饲料网站有什么名字吗厦门seo起梦网络科技
  • 做网站招商需要具备什么恶意点击软件有哪些
  • 申请收费网站空间徐州网络推广服务
  • 做网站除了有服务器还需要什么网页设计参考网站
  • 如何了解和掌握一个网站的权重丈哥seo博客
  • 番禺网站优化百度网站介绍
  • 秦皇岛哪家公司网站建设好怎么接推广
  • 网站不显示内容吗网页怎么做
  • 博客和网站的区别爱奇艺科技有限公司
  • 网站制作论文优帮云怎么自己做网站
  • 对比色的网站互联网广告是做什么的
  • 松江郑州阳网站建设怎么做推广和宣传平台
  • 济南房产网签查询系统搜索引擎关键词快速优化
  • 做门户网站长沙社区赚钱吗网站制作培训
  • 现在为什么网站都打不开了怎么办啊代写文章的平台有哪些
  • 合肥做微网站建设互联网品牌营销公司
  • 蔡文胜做的个人网站品牌服务推广
  • 广州网站建设 乐云seo产品推广平台排行榜
  • 外贸招聘网站营销型网站制作成都
  • 职业生涯规划大赛的意义泰安seo
  • 天河做网站平台微博seo营销
  • 做网站的不肯给ftp外链购买交易平台
  • 来推网站足球比赛统计数据
  • 物联网的应用邵阳seo排名