Python多处理代码运行速度比单线程代码慢

Python多处理代码运行速度比单线程代码慢,python,python-3.x,multiprocessing,python-multiprocessing,pymssql,Python,Python 3.x,Multiprocessing,Python Multiprocessing,Pymssql,i7 7700HQ上的Python多处理性能明显低于非并行处理 在计划为mssql中的单表数据库并行化Select和Update代码时,我尝试首先并行化一个简单的代码。程序只打印参数的倍数。 我尝试了使用进程对象和池对象的单线程、多进程。单线程总是表现最好 导入时间 福巴拉: 对于范围为110000的i: 打印A*i 回来 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: t线程=time.clock p1=Processtarget=foobar,args

i7 7700HQ上的Python多处理性能明显低于非并行处理

在计划为mssql中的单表数据库并行化Select和Update代码时,我尝试首先并行化一个简单的代码。程序只打印参数的倍数。 我尝试了使用进程对象和池对象的单线程、多进程。单线程总是表现最好

导入时间 福巴拉: 对于范围为110000的i: 打印A*i 回来 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: t线程=time.clock p1=Processtarget=foobar,args=3, p2=Processtarget=foobar,args=2, p3=Processtarget=foobar,args=4, p4=Processtarget=foobar,args=123, allprocess.start allprocess.join printtime.clock-t线程 单螺纹 时钟 foobar3 foobar2 foobar4 foobar123 printtime.clock-Tsingle 我预计多进程会快得多,因为没有共享的resourcesno函数,线程和IPC之间需要访问的变量

单线程时间:0.32s


多进程时间:0.53s实际上,在您的示例中有一个重要的共享资源,您的监视器或标准输出

与CPU周期相比,打印是一个相对较慢的操作…,它会导致进程之间的争用

正确地对并行工作进行基准测试是一项艰巨的任务,它受CPU的许多因素和特性(例如缓存)的影响

尝试用非常适合多处理的工作负载来代替您的工作负载,例如并行处理阵列的不同部分、矩阵乘法

还有一件更重要的事情:产生新的流程也需要时间,要想让它支付每个流程中完成的工作,需要非常重要。 如果将循环的范围稍微增加一点,则差异应该有利于多进程版本:

导入时间 从多处理导入进程 福巴拉: 对于110000000范围内的i: a*i 回来 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: Tthreading=time.time p1=Processtarget=foobar,args=3, p2=Processtarget=foobar,args=2, p3=Processtarget=foobar,args=4, p4=Processtarget=foobar,args=123, allprocess=[p1、p2、p3、p4] 对于所有过程中的p: p、 开始 对于所有过程中的p: p、 加入 printtime.time-t线程 单螺纹 时间 foobar3 foobar2 foobar4 foobar123 printtime.time-Tsingle 在我的机器上,此输出:

0.44509196281431105

1.3775699138641357


您正在共享stdout…删除print和simpt执行“a*i”并没有帮助并行代码比非并行用户更快地获得更高的范围值,您将看到多处理开始获胜。启动和加入流程总是有开销。相当多。@juanpa.arrivillaga是的!。它把它变成了一个双环,展示了它的魔力,令人惊叹。我能知道一件事吗?“目标”流程函数在自身内部使用的其他函数是否算作共享资源?我应该有一个类,然后为每个对象创建一个过程来克服这个问题吗?还有其他方法吗?谢谢你!不,有两个独立的python进程具有独立的状态,它们是父进程内存段的副本。这是开销中的一个因素。它们不是线。谢谢你的建议!现在,在将foobar更改为python def foobara:for i的范围110000:a*i return之后,时间显著减少,但单线程速度更快。单线程时间:0.004s多线程:0.22SY您有额外的时间生成新进程,这也是一种繁重的操作。尝试在foobar中做更繁重的工作,这将需要几秒钟而不是几毫秒,差异应该平衡,有利于多进程解决方案我在手机上,大约1小时后,我将在一台笔记本电脑前,并可以帮助提供一个示例。非常感谢您提供的信息!这是一个非常有帮助的社区。非常感谢。