php网站开发具体的参考文献绍兴网站建设优化
2026/4/18 12:49:58 网站建设 项目流程
php网站开发具体的参考文献,绍兴网站建设优化,云南旅行社网站开发,贵州建设职业学院官方网站一、引言昨天讲了多任务和多进程,今天咱们接着将线程和协程.二、多线程1.线程的概念线程是程序执行的最小单位 , 实际上进程只负责分配资源 , 而利用这些资源执行程序的是线程 , 也就说进程是线程的容器 , 一个进程中最少有一个线程来负责执行程序 。同时线程自己不拥有系统资源…一、引言昨天讲了多任务和多进程,今天咱们接着将线程和协程.二、多线程1.线程的概念线程是程序执行的最小单位, 实际上进程只负责分配资源 , 而利用这些资源执行程序的是线程 , 也就说进程是线程的容器 , 一个进程中最少有一个线程来负责执行程序 。同时线程自己不拥有系统资源只需要一点儿在运行中必不可少的资源但它可与同属一个进程的其它线程共享进程所拥有的全部资源。这就像通过一个QQ软件(一个进程)打开两个窗口(两个线程)跟两个人聊天一样 , 实现多任务的同时也节省了资源。2.多线程完成多任务① 导入线程模块 import threading ② 通过线程类创建线程对象 线程对象 threading.Thread(target任务名) ② 启动线程执行任务 线程对象.start()参数名说明target执行的目标任务名,这里指的是函数名(方法名)name线程名一般不用设置group线程组目前只能使用None2.1线程创建与启动代码import time import threading def music(): for i in range(3): print(听音乐...) time.sleep(0.2) def coding(): for i in range(3): print(敲代码...) time.sleep(0.2) if __name__ __main__: music_thread threading.Thread(targetmusic) coding_thread threading.Thread(targetcoding) music_thread.start() coding_thread.start()2.2线程执行带有参数的任务参数名说明args以元组的方式给执行任务传参kwargs以字典方式给执行任务传参import time import threading def music(num): for i in range(num): print(听音乐...) time.sleep(0.2) def coding(count): for i in range(count): print(敲代码...) time.sleep(0.2) if __name__ __main__: music_thread threading.Thread(targetmusic, args(3, )) coding_thread threading.Thread(targetcoding, kwargs{count: 3}) music_thread.start() coding_thread.start()3.主线程和子线程的结束顺序import time import threading def work(): for i in range(10): print(work...) time.sleep(0.2) if __name__ __main__: # 创建子进程 work_thread threading.Thread(targetwork) # 启动线程 work_thread.start() # 延时1s time.sleep(1) print(主线程执行完毕)设置守护线程方式一:import time import threading def work(): for i in range(10): print(work...) time.sleep(0.2) if __name__ __main__: # 创建子线程并设置守护主线程 work_thread threading.Thread(targetwork, daemonTrue) # 启动线程 work_thread.start() # 延时1s time.sleep(1) print(主线程执行完毕)设置守护线程方式二:import time import threading def work(): for i in range(10): print(work...) time.sleep(0.2) if __name__ __main__: # 创建子线程 work_thread threading.Thread(targetwork) # 设置守护主线程 work_thread.setDaemon(True) # 启动线程 work_thread.start() # 延时1s time.sleep(1) print(主线程执行完毕)4.线程之间的执行顺序线程之间的执行是无序的.5.线程执行顺序验证获取当前线程信息# 通过current_thread方法获取线程对象 current_thread threading.current_thread() # 通过current_thread对象可以知道线程的相关信息例如被创建的顺序 print(current_thread)线程间的执行顺序import threading import time def get_info(): # 可以暂时先不加查看效果 time.sleep(0.5) current_thread threading.current_thread() print(current_thread) if __name__ __main__: # 创建子线程 for i in range(10): sub_thread threading.Thread(targetget_info) sub_thread.start()线程之间执行是无序的是由CPU调度决定某个线程先执行的。6.线程间共享全局变量这点很好理解,前面我们讲了进程不共享全局变量的原因是不同进程都把最开始的全局变量复制了一份给自己,就好比孙悟空的分身,虽然是由孙悟空这个全局变量分出的,但每一个分身都可以看作是一个个体,对本体造不成任何影响.但是线程本质是同一个进程里的东西,就好比分身的四肢,四肢变化了,对本体肯定是有影响的,不知道这样形容大家有没有觉得更形象一点.7.进程和线程的对比7.1关系对比① 线程是依附在进程里面的没有进程就没有线程。② 一个进程默认提供一条线程进程可以创建多个线程。7.2区别对比① 进程之间不共享全局变量② 线程之间共享全局变量③ 创建进程的资源开销要比创建线程的资源开销要大④ 进程是操作系统资源分配的基本单位线程是CPU调度的基本单位7.3优缺点对比进程优缺点:​ 优点可以用多核​ 缺点资源开销大线程优缺点​ 优点资源开销小​ 缺点不能使用多核三、多协程1.python中的生成器根据程序设计者制定的规则循环生成数据当条件不成立时则生成数据结束数据不是一次性全部生成出来而是使用一个再生成一个可以节约大量的内存。创建生成器的方式① 生成器推导式生成器推导式与列表推导式类似只不过生成器推导式使用小括号。# 创建生成器 my_generator (i * 2 for i in range(5)) print(my_generator) # next获取生成器下一个值 # value next(my_generator) # print(value) # 遍历生成器 for value in my_generator: print(value)生成器的相关函数:next 函数获取生成器中的下一个值for 循环遍历生成器中的每一个值② yield 关键字yield 关键字生成器的特征在def函数中具有yield关键字def generator(n): for i in range(n): print(开始生成...) yield i print(完成一次...) g generator(5) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) ----- 正常 print(next(g)) ----- 报错注意点① 代码执行到 yield 会暂停然后把结果返回出去下次启动生成器会在暂停的位置继续往下执行② 生成器如果把数据生成完成再次获取生成器中的下一个数据会抛出一个StopIteration 异常表示停止迭代异常③ while 循环内部没有处理异常操作需要手动添加处理异常操作④ for 循环内部自动处理了停止迭代异常使用起来更加方便推荐大家使用。yield关键字和return关键字如果不太好理解yield可以先把yield当作return的同胞兄弟来看他们都在函数中使用并履行着返回某种结果的职责。这两者的区别是有return的函数直接返回所有结果程序终止不再运行并销毁局部变量def example(): x 1 return x example example() print(example)而有yield的函数则返回一个可迭代的 generator生成器对象你可以使用for循环或者调用next()方法遍历生成器对象来提取结果。def example(): x 1 y 10 while x y: yield x x 1 example example() print(example)2.Python中的协程Python 的协程实现确实是从生成器发展而来的。特性生成器 (Generator)协程 (Coroutine)主要目的生成值序列执行异步任务控制流单向调用者 → 生成器双向调用者 ↔ 协程数据流向数据向外流动产出值数据双向流动发送和接收调度由调用者驱动由事件循环调度关键字yieldasync,await类型GeneratorCoroutinePython 协程是由async def定义的异步函数它是一种实现了Awaitable协议的状态保持执行单元。其执行由事件循环调度通过await表达式主动挂起将控制权交还调度器实现协作式并发。协程三要素函数前加 async等待处加 await启动用 asyncio.run使用三步骤定义 async 函数用 create_task 创建任务用 await 等待结果3.进程、线程、协程最简单记忆方法协程单线程魔术师手里抛接多个球I/O等待时换件事做线程多个魔术师但只有一个能表演GIL限制进程多个魔术师各自独立表演 完全独立四、结语多任务变成这块就告一段落了,后面会继续讲正则表达式的相关概念.

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询