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

山西本土网站建设漯河住房建设局网站

山西本土网站建设,漯河住房建设局网站,郑州网站建设找哪家好,企业微网站怎么建设一、说明 在本文中#xff0c;我们将学习 Python 中多线程和多处理的内容、原因和方式。在我们深入研究代码之前#xff0c;让我们了解这些术语的含义。 二、基本术语和概念 程序是一个可执行文件#xff0c;它由一组执行某些任务的指令组成#xff0c;通常存储在计算机的…一、说明 在本文中我们将学习 Python 中多线程和多处理的内容、原因和方式。在我们深入研究代码之前让我们了解这些术语的含义。 二、基本术语和概念 程序是一个可执行文件它由一组执行某些任务的指令组成通常存储在计算机的磁盘上。    进程就是我们所说的程序它已与运行所需的所有资源一起加载到内存中。它有自己的内存空间。    线程是进程中的执行单元。一个进程可以有多个线程作为其一部分运行其中每个线程使用进程的内存空间并与其他线程共享。    多线程是一种技术其中进程生成多个线程以执行不同的任务大约在同一时间一个接一个。这给你一种错觉即线程是并行运行的但实际上它们是以并发方式运行的。在 Python 中全局解释器锁 GIL 阻止线程同时运行。 多处理是一种实现最真实形式的并行性的技术。多个进程跨多个 CPU 内核运行这些内核之间不共享资源。每个进程可以在自己的内存空间中运行许多线程。在 Python 中每个进程都有自己的 Python 解释器实例负责执行指令。    现在让我们进入程序我们尝试以六种不同的方式执行两种不同类型的函数IO 绑定和 CPU 绑定。在 IO 绑定函数中我们要求 CPU 闲置并打发时间而在 CPU 绑定函数中CPU 将忙于产生一些数字。 要求 一台 Windows 计算机我的机器有 6 个内核。已安装 Python 3.x。任何用于编写 Python 程序的文本编辑器/IDE我在这里使用 Sublime Text。 注意以下是我们程序的结构它将在所有六个部分中通用。在提到它的地方 # YOUR CODE SNIPPET HERE将其替换为每个部分的代码片段。 import time, os from threading import Thread, current_thread from multiprocessing import Process, current_processCOUNT 200000000 SLEEP 10def io_bound(sec):pid os.getpid()threadName current_thread().nameprocessName current_process().nameprint(f{pid} * {processName} * {threadName} \--- Start sleeping...)time.sleep(sec)print(f{pid} * {processName} * {threadName} \--- Finished sleeping...)def cpu_bound(n):pid os.getpid()threadName current_thread().nameprocessName current_process().nameprint(f{pid} * {processName} * {threadName} \--- Start counting...)while n0:n - 1print(f{pid} * {processName} * {threadName} \--- Finished counting...)if __name____main__:start time.time()# YOUR CODE SNIPPET HEREend time.time()print(Time taken in seconds -, end - start) 三、进程对CPU绑定 第 1 部分一个接一个地运行 IO 绑定任务两次… # Code snippet for Part 1 io_bound(SLEEP) io_bound(SLEEP)在这里我们要求 CPU 执行函数 io_bound该函数将整数此处为 10作为参数并要求 CPU 休眠几秒钟。此执行总共需要 20 秒因为每个函数执行需要 10 秒才能完成。请注意它是同一个 MainProcess 使用其默认线程 MainThread 一个接一个地调用我们的函数两次。 第 2 部分使用线程运行受 IO 绑定的任务… # Code snippet for Part 2 t1 Thread(target io_bound, args (SLEEP, )) t2 Thread(target io_bound, args (SLEEP, )) t1.start() t2.start() t1.join() t2.join()在这里让我们使用 Python 中的线程来加快函数的执行速度。线程 Thread-1 和 Thread-2 由我们的 MainProcess 启动每个线程几乎同时调用我们的函数。两个线程同时完成休眠 10 秒的工作。这大大缩短了整个程序的总执行时间减少了 50%。因此多线程是执行任务的首选解决方案其中 CPU 的空闲时间可用于执行其他任务。因此通过利用等待时间来节省时间。 第 3 部分一个接一个地运行两次 CPU 密集型任务… # Code snippet for Part 3 cpu_bound(COUNT) cpu_bound(COUNT)在这里我们将调用我们的函数 cpu_bound它将一个大数字此处为 200000000作为参数并在每一步将其递减直到它为零。我们的 CPU 被要求在每次函数调用时进行倒计时这大约需要 12 秒这个数字可能因您的计算机而异。因此整个程序的执行花了我大约 26 秒才能完成。请注意MainProcess 再次在其默认线程 MainThread 中一个接一个地调用该函数两次。 第 4 部分线程可以加快我们受 CPU 限制的任务吗 # Code snippet for Part 4 t1 Thread(target cpu_bound, args (COUNT, )) t2 Thread(target cpu_bound, args (COUNT, )) t1.start() t2.start() t1.join() t2.join()好的我们刚刚证明了线程对于多个 IO 绑定任务的效果非常好。让我们使用相同的方法来执行 CPU 密集型任务。好吧它最初确实同时启动了我们的线程但最终我们看到整个程序执行花费了大约 40 秒刚刚发生了什么这是因为当 Thread-1 启动时它获得了全局解释器锁 GIL从而阻止 Thread-2 使用 CPU。因此Thread-2 必须等待 Thread-1 完成其任务并释放锁以便它可以获取锁并执行其任务。这种锁的获取和释放增加了总执行时间的开销。因此我们可以肯定地说对于需要 CPU 处理某事的任务来说线程并不是一个理想的解决方案。 第 5 部分那么将任务拆分为单独的流程是否有效 # Code snippet for Part 5 p1 Process(target cpu_bound, args (COUNT, )) p2 Process(target cpu_bound, args (COUNT, )) p1.start() p2.start() p1.join() p2.join()让我们切入正题。多处理就是答案。在这里MainProcess 启动了两个子进程它们具有不同的 PID每个子进程都负责将数字减少到零。每个进程并行运行使用单独的 CPU 内核和它自己的 Python 解释器实例因此整个程序执行只需 12 秒。请注意输出可能以无序方式打印因为进程彼此独立。每个进程都在其自己的默认线程 MainThread 中执行函数。在程序执行期间打开任务管理器。您可以看到 Python 解释器的 3 个实例MainProcess、Process-1 和 Process-2 各一个。您还可以看到在程序执行期间两个子进程的功耗为“非常高”因为它们正在执行的任务实际上正在对它们自己的 CPU 内核造成影响如 CPU 性能图中的峰值所示。 第 6 部分我们对 IO 绑定任务使用多处理… # Code snippet for Part 6 p1 Process(target io_bound, args (SLEEP, )) p2 Process(target io_bound, args (SLEEP, )) p1.start() p2.start() p1.join() p2.join()现在我们已经对多处理帮助我们实现并行性有了大致的了解我们将尝试使用这种技术来运行我们的 IO 绑定任务。我们确实观察到结果是非凡的就像在多线程的情况下一样。由于进程 1 和进程 2 正在执行要求自己的 CPU 内核闲置几秒钟的任务因此我们没有发现高功耗。但是进程的创建本身就是一项 CPU 繁重的任务并且比创建线程需要更多的时间。此外进程需要的资源比线程多。因此最好将多处理作为 IO 绑定任务的第二个选项多线程是第一个选项。    嗯那是一段相当长的旅程。我们看到了执行一项任务的六种不同方法大约需要 10 秒具体取决于任务对 CPU 的影响是轻还是重。 四、结论 底线IO 绑定任务的多线程处理。CPU密集型任务的多处理。 Python 中的多线程Python 中的多处理它实现了并发性。它实现了并行性。在并行计算的情况下Python 不支持多线程。Python 在并行计算的情况下支持多处理。在多线程中单个进程同时生成多个线程。在多处理中多个线程同时跨多个内核运行。无法对多线程进行分类。多处理可以分为对称或非对称。 。
http://www.zqtcl.cn/news/275887/

相关文章:

  • 提供有经验的网站建设百度识图识别
  • html手机网站怎么做湖南关键词优化品牌推荐
  • 网站定制开发收费标准是多少易语言如何做浏网站
  • 网站怎么做实名认证新手怎么开婚庆公司
  • .net做网站用什么技术网站优化排名方案
  • 电商网站备案流程网站移动端优化的重点有哪些
  • 数据需求 网站建设做qq空间的网站
  • 微信网站游戏网络规划设计师可以挂证吗
  • 有个做特价的购物网站网站建设与维护题库及答案
  • 长沙网站优化价格创意设计师个人网站
  • 滨河网站建设南京免费发布信息网站
  • 蓝色系列的网站邓砚谷电子商务网站建设
  • 德阳市住房和城乡建设局网站首页一个服务器可以建多少个网站
  • 建一个电商网站多少钱一起做网店货源app
  • 做网站用lunx代理记账 营销型网站
  • 凡客做网站怎么样WordPress分类目录 前100篇
  • 腾讯wordpress 建站教程本地的上海网站建设公司
  • 深圳市南山区住房和建设局官方网站上海专业网站建设公司站霸网络
  • 建网站的8个详细步骤网站集约化建设讲话
  • 建设局哪个网站查证南京注册公司多少钱
  • 免费的网站制作郑州中森网站建设
  • 网站关键词搜不到了濮阳网络教育
  • 推荐股票的好网站如何做好网站宣传
  • 免费网站模板网大型网络游戏
  • 网站开发语言数据库有几种广东省建设厅官网查询
  • 建新建设集团有限公司网站土巴兔装修公司电话
  • 百度网站审核期时间wordpress如何实现收费会员制
  • delphi 2010 网站开发wordpress 变装小说
  • asp.net电子商务网站前台模板企业所得税优惠政策2021年小微企业
  • 成都网站建设 lkcms深圳做网站哪个公司最好