使用 Python 进程进行多处理

2023-12-04

我正在尝试使用“Process”将Python脚本修改为多进程。问题是它不起作用。第一步,按顺序检索内容(test1、test2)。在第二个中,将并行调用它(test1 和 test2)。实际上没有速度差异。如果单独执行这些函数,您会注意到差异。在我看来,并行化应该只需要与最长的单个进程一样长的时间。我在这里缺少什么?

import multiprocessing
import time

def test1(k):
           k = k * k
           for e in  range(1, k):
                          e = e**k
def test2(k):
           k = k * k
           for e in  range(1, k):
                          e = e + 5 - 5*k ** 4000
if __name__ == '__main__':

           start = time.time()
           test1(100)
           test2(100)
           end = time.time()
           print(end-start)

           start = time.time()
           worker_1 = multiprocessing.Process(target=test1(100))
           worker_1.start()

           worker_2 = multiprocessing.Process(target=test2, args=(100,))
           worker_2.start()

           worker_1.join()
           worker_2.join()
           end = time.time()
           print(end-start)

我想补充一点,我检查了任务管理器,发现只使用了 1 个核心。 (4 个真正的核心仅 25% CPU => 1Core 100% 使用)

我知道 Pool Class,但我不想使用它。

感谢您的帮助。

Update

大家好, 有“错别字”的那一个是不利的。对于那个很抱歉。巴库留,谢谢你的回答。事实上,你是对的。我认为这是打字错误和太多的工作。 :-( 所以我再次改变了这个例子。对于所有感兴趣的人:

我创建了两个函数,在主函数的第一部分中,我按顺序运行了 3 次函数。我的电脑大约需要36秒。然后我启动两个新进程。它们在这里并行计算结果。作为一个小小的补充,程序本身的皮肤进程还计算了函数test1,这应该表明主程序本身也可以做一些事情。我得到的计算时间为 12 秒。为了让互联网上的所有人都能理解,这意味着什么,我曾经在这里附上一张图片。任务管理器

import multiprocessing
import time

def test1(k):
           k = k * k
           for e in  range(1, k):
                          e = e**k

def test2(k):
           k = k * k
           for e in  range(1, k):
                          e = e**k

if __name__ == '__main__':


           start = time.time()
           test1(100)
           test2(100)
           test1(100)
           end = time.time()
           print(end-start)


           start = time.time()
           worker_1 = multiprocessing.Process(target=test1, args=(100,))
           worker_1.start()

           worker_2 = multiprocessing.Process(target=test2, args=(100,))
           worker_2.start()

           test1(100)

           worker_1.join()
           worker_2.join()
           end = time.time()
           print(end-start)

您的代码是按顺序执行的,因为而不是传递test1 to the Process's target你正在传递的论点test1's result to it!

你想要这样做:

worker_1 = multiprocessing.Process(target=test1, args=(100,))

正如您在另一个通话中所做的那样not this:

worker_1 = multiprocessing.Process(target=test1(100))

这段代码是first执行test1(100),然后返回None并将其分配给target产生一个“空进程”。之后,您生成第二个执行的进程test2(100)。因此,您按顺序执行代码,并且添加了生成两个进程的开销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 进程进行多处理 的相关文章

随机推荐

  • 检测快速按两次电源按钮

    是否可以检测用户是否快速按下电源按钮两次 Apple 使用这种方式在带有 Face ID 的新款 iPhone X 上确认 Appstore 购买 有可用的API吗 希望在类似情况下使用它通过 Face ID 进行身份验证 不会 系统本身控
  • 将 YAML 与变量一起使用

    YAML 文件中可以使用变量吗 例如 theme name default css path compiled themes theme name layout path themes theme name 在这个例子中 如何theme n
  • Mac OS X 上 sqlite4java Jar 出现 UnsatisfiedLinkError

    我在 Java 应用程序中使用 sqlite4java 库 当我在 Eclipse 中运行它时它工作得很好 但是当我构建可运行的 JAR 并尝试在 Mac OS X 上运行它时 出现以下错误 Error Could not load dat
  • C# DLL 配置文件

    我试图将 app config 文件添加到我的 DLL 中 但所有尝试都失败了 据 音乐创世纪 报道 将配置信息放入 DLL 中 这应该不是问题 所以显然我做错了什么 以下代码应从 DLL 返回我的 ConnectionString ret
  • 使用 VBA 方法通过 Bing API 获取距离

    我试图通过 VBA 创建一个方法 当我使用此方法时 它显示 NAME 有时 value Public Function DISTANCE start As String dest As String key As String Dim fi
  • Objective-C UITableView 单元格图像

    所以我有一个UI表格视图Facebook 好友和一个单元格 我想将图像添加到其中 当我尝试以下代码时 cell imageView image UIImage imageWithData NSData dataWithContentsOfU
  • 从数据库或属性获取 Spring Security 拦截 url

    希望这非常简单 存在 并且我忽略了我眼皮底下的一些东西 我知道我可以通过注释限制访问 Secured ROLE ADMIN 或通过配置
  • UIButton标题消失

    我有一个 ViewController 里面有一个 UIButton 当我点击时 按钮上的文字消失了 我为所有状态添加了所有 setTitle 但它继续消失 任何想法 这是我的代码的一部分 interface AddCardViewCont
  • 重塑表格以将行转换为列

    我尝试搜索帖子 但只找到了 SQL Server Access 的解决方案 我需要 MySQL 5 X 中的解决方案 我有一个包含 3 列的表 称为历史记录 hostid itemname itemvalue 如果我做一个选择 select
  • 如何在 mysql C++ 连接器中设置超时

    我正在使用 C 连接器连接到 MySQL 服务器 当服务器离线或处于睡眠状态时 语句执行方法需要一段时间才能检测连接问题 是否有方法或变量来控制客户端的等待超时时间 Regards德瓦拉 古达 您可以使用mysql options设置客户端
  • Swift Spritekit 我检测到碰撞,但它多次读取碰撞

    AppImage我有一堵由 4 个不同颜色的矩形组成的墙 要穿过这堵墙 球的颜色必须与墙上的矩形的颜色相匹配 球将穿过墙壁 新的墙壁将会出现 然而 当我检测到这种碰撞时 我得到了多个碰撞读数 我已经通过打印死或活来测试这一点 并且它会多次打
  • Idea 中的 Tomcat。战争爆发:服务器未连接。部署不可用

    我正在尝试这个tutoial 我创建了新项目并运行它 TomCat 启动了 但之后什么也没发生 我可以手动在浏览器中打开http localhost 8080并查看 TomCat 主页 这意味着服务器可以启动 但是我无法打开index js
  • ajax成功后jQuery继续循环执行

    我有一个循环中的 jQuery ajax 调用 但是我不希望同时进行这些 ajax 调用 我需要先完成第一个 ajax 调用 然后再进行下一个调用 for var i 0 i lt options length i jQuery ajax
  • 在 python 中使用 enumerate() 时从列表中删除元素[重复]

    这个问题在这里已经有答案了 Object 是一个解码后的 json 对象 其中包含一个名为 items 的列表 obj json loads response body as unicode for index item in enumer
  • 如何使用 GAE 创建自动完成功能?

    我使用 jQuery UI自动完成小部件 我还有 GAE 数据存储 class Person db Model key name contains person id in format lastname firstname middlen
  • 如何将 JRE 捆绑到 Java 应用程序的 EXE 中? Launch4j 提示“运行时丢失或损坏。”

    我对 Java 编程很陌生 但总体上熟悉一切的工作原理 我希望能够将 jar 文件和 jre 放入 Windows 可执行文件 exe 中 这样当我分发它时 客户端不需要安装 JRE 我应该使用什么程序 我有 launch4j 它似乎完全符
  • WindowChrome - 无法单击标题栏中的按钮

    我的 WPF 应用程序有一个自定义 WindowChrome 样式 从此处摘取 http www bdevuyst com wpf custom title bar and taskbar 代码在这里
  • pygobject 中的拖放无响应

    我试图让拖放在 pygobject 中正常工作 但它很慢而且反应迟钝 90 的时间我必须挥动我正在拖动的项目才能成功放下它 任何人都可以看看我是否做得不正确或者这是 pygobject 的错误 这是我的代码 from gi reposito
  • 来自网络摄像头流的 Raspberry Pi 3 Python 和 OpenCV 人脸识别

    我尝试使用树莓派 3 型和摄像头模块通过 WiFi 网络传输视频 但发现与我在网上找到的其他示例存在一些不一致之处 我试图获得该视频中执行的第三次测试的结果 https www youtube com watch v sYGdge3T30o
  • 使用 Python 进程进行多处理

    我正在尝试使用 Process 将Python脚本修改为多进程 问题是它不起作用 第一步 按顺序检索内容 test1 test2 在第二个中 将并行调用它 test1 和 test2 实际上没有速度差异 如果单独执行这些函数 您会注意到差异