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

网站开发合同范本下载小程序的定义

网站开发合同范本下载,小程序的定义,网站迭代,网站模块设计Python中线程的实现 1. 线程 在Python中#xff0c;threading 库提供了线程的接口。我们通过threading 中提供的接口创建、启动、同步线程。 例1. 使用线程旋转指针 想象一个场景#xff1a;程序执行了一个耗时较长的操作#xff0c;如复制一个大文件#xff0c;我们希…Python中线程的实现 1. 线程 在Python中threading 库提供了线程的接口。我们通过threading 中提供的接口创建、启动、同步线程。 例1. 使用线程旋转指针 想象一个场景程序执行了一个耗时较长的操作如复制一个大文件我们希望这个过程中程序显示一个动画表示程序正常运行没有卡死。 简化一下启动一个函数执行 3 秒。在这3秒内在终端持续显示指针旋转的动画。下面用线程来实现这个操作。 注本例代码主要来自《流畅的Python》(第二版) 19.4.1 首先我们定义旋转函数spin和阻塞函数slow。 spin函数每隔0.1s依次打印\|/-看起来就像是指针转动 import itertools import time def spin(msg: str) - None: for char in itertools.cycle(r\|/-): status f\r{char} {msg} print(status, end, flushTrue)time.sleep(0.1)blanks * len(status)print(f\r{blanks}\r, end)if __name__ __main__:spin(thinking...)slow函数用来模拟一个耗时的操作。这里我们直接调用time.sleep(3) 等待3秒然后返回一个结果。 # 阻塞3秒并返回42 def slow() - int:time.sleep(3) return 42调用time.sleep() 阻塞所在的线程但是释放 GIL其他 Python 线程可以继续运行。 现在我们要用线程实现并发。看起来就像是slow和spin同时进行。 下面对spin函数做了一些修改通过threading.Event信号量来同步线程。 import itertools import time from threading import Thread, Event# 旋转 def spin(msg: str, done: Event) - None: # done用于同步线程for char in itertools.cycle(r\|/-): status f\r{char} {msg} print(status, end, flushTrue)if done.wait(.1): #等待/阻塞 。除非有其他线程set了这个事件,则返回True或者经过指定的时间(0.1s)后返回 False。breakblanks * len(status)print(f\r{blanks}\r, end)# 阻塞3秒并返回42 def slow() - int:time.sleep(3) return 42使用线程来并发执行两个函数。 下面我们只手动启动了一个spinner线程因为程序本身就有一个主线程。 def supervisor() - int: done Event() # 信号量用于线程同步spinner Thread(targetspin, args(thinking!, done)) # 使用Thread创建线程实例spinner。print(fspinner object: {spinner}) spinner.start() # 启动spinner线程result slow() # 调用slow阻塞 main 线程。同时次线程spinner运行旋转指针动画done.set() # 设置done为真唤醒等待done的线程。结束spinner中的循环。spinner.join() # 等待spinner 线程结束。-貌似这里加不加都不影响。return resultdef main() - None:result supervisor() print(fAnswer: {result})if __name__ __main__:main()程序的执行顺序主要步骤都发生在supervisor函数中我们跳过main从supervisor开始看。 由于GIL的存在同一时刻只有一个线程在执行。所以下面是一个顺序执行的过程。 执行过程大致如下 主线程创建spinner线程启动spinner线程 spinner线程输出字符然后遇到done.wait(.1) 阻塞自己。 主线程调用slow函数遇到time.sleep(3) 阻塞 spinner线程done.wait(.1) 超过了0.1秒返回False继续输出字符。重复进行阻塞0.1秒、输出字符。 3秒后… 主线程slow执行完毕返回结果42。主线程继续执行done.set()这会唤醒等待done的线程spinner。 spinner线程运行到done.wait(.1)由于主线程执行了done.set()使得这里的结果为True所以执行break结束循环。执行循环下面的print语句后spinner线程结束。 主线程返回结果。 例2.计算因子 第二个例子我们看一个失败的并行计算的例子 我们希望用n个线程并行计算n个数各自的因子。 注本例代码来自《Effective Python》(第二版) 第53章 基准方法 逐个计算。 import time# 计算number的因子 def factorize(number):for i in range(1, number 1):if number % i 0:yield inumbers [2139079, 1214759, 1516637, 1852285, 14256346, 12456533] start time.time()for number in numbers:list(factorize(number))end time.time() delta end - start print(f串行方法花费了 {delta:.3f} 秒)多线程方式 可以像例1中使用Thread函数实现线程 def get_factor(number):factors list(factorize(number))return factorsstart time.time() threads [] for number in numbers:thread Thread(targetget_factor, args(number,))thread.start() # 启动threads.append(thread)# 等待所有线程完成 for thread in threads:thread.join() # 等待完成end time.time() delta end - start print(fThread方法花费了 {delta:.3f} 秒)实现线程的另一种方式是继承Thread类并实现run方法 from threading import Thread# 继承Thread需要实现run方法在run方法中执行要做的事情 class FactorizeThread(Thread):def __init__(self, number):super().__init__()self.number numberdef run(self):self.factors list(factorize(self.number))start time.time()threads [] for number in numbers:thread FactorizeThread(number)thread.start() # 启动threads.append(thread)# 等待所有线程完成 for thread in threads:thread.join() # 等待完成end time.time() delta end - start print(fThread方法花费了 {delta:.3f} 秒)运行结果 你会发现这个多线程的版本并没有变快这并不意外。 介绍线程时说过因为GIL的存在多线程无法同时执行甚至因为创建和切换线程产生额外的开销导致耗时增加。 小结 在GIL的限制下Python线程对于并行计算没有用处但是对于等待IO、网络、后台任务是有用处的。下一节我们会看一些Python线程的实际案例。
http://www.zqtcl.cn/news/236569/

相关文章:

  • 网站建设制作公司xshell如何做网站
  • 义乌个人兼职做建设网站琼海做网站公司
  • 什么网站可以直接做word在柬埔寨做网站彩票推广
  • 深圳市宝安区住房和建设局网站校园网络方案设计
  • 株洲建设网站制作seo快速软件
  • 建站什么程序好wordpress返佣
  • 网站建设使用虚拟主机的优点与缺点马蹄室内设计论坛
  • 像wordpress一样的网站wordpress提示数据库出错
  • 优化网站首页新项目首码对接平台
  • 一个完整的网站建设过程wordpress企业中文模板下载
  • 我做微信淘宝客网站有哪些在公司做网站是什么职位
  • 湖南网站建设公司 干净磐石网络网站开发技术可行性分析怎么写
  • 石家庄制作网站网络推广与优化
  • 建站平台免代码可以自己设计图案的软件
  • 中山网站开发公司事业单位 网站备案
  • wordpress 做用户登录seo快速推广窍门大公开
  • php网站开发试卷做外贸一般在哪个网站
  • 有哪些网站的搜索引擎网站设计需要需要用
  • 网站建设有哪些需求徐州百度运营中心
  • 怎么做电脑网站后台杭州网站制作公司排名
  • 济南手机网站定制价格wordpress前端登陆 投稿
  • 建设企业网站的原因网站开发项目经验和教训
  • 京东网站的建设与发展现状分析手机与pc网站同步模板
  • 枣阳网站建设吧yw最新域名备案查询
  • 西安知名网站建设公司什么网站可以分享wordpress
  • ugc网站开发2022恢复线下教学通知
  • 网站界面尺寸珠海网站建设制作哪家专业
  • 上海闸北城市建设有限公司网站想学设计没有基础怎么办
  • 免费微网站哪个好用在线网页代理浏览免费
  • 广州建设专业网站寻找做项目的网站