linux跑程序比windows慢吗,多处理比Windows中的串行处理慢(但在Linux中不是)

我试图并行化for loop来加速我的代码,因为循环处理操作都是独立的。以下是在线教程,Python中的标准multiprocessing库似乎是一个良好的开端,我已经将其用于基本示例。在

但是,对于我的实际用例,我发现在Windows上运行并行处理(使用双核计算机)实际上要慢一点(5%)。然而,在Linux上运行相同的代码,与串行执行相比,并行处理速度提高了约25%。在

从文档来看,我认为这可能与Window缺少fork()函数有关,这意味着进程每次都需要重新初始化。但是,我不完全理解这一点,不知道是否有人可以证实这一点?在

尤其是

-->gt;这是否意味着调用python文件中的所有代码都将针对Windows上的每个并行进程运行,甚至初始化类和导入包?在

-->如果是这样,是否可以通过将类的副本(例如使用deepcopy)传递到新进程中来避免这种情况?在

-->对于unix和windows,是否有任何技巧/其他策略可以有效地并行化代码设计。在

我的确切代码很长,并且使用了许多文件,所以我创建了一个pseucode风格的示例结构,希望能说明这个问题。在# Imports

from my_package import MyClass

imports many other packages / functions

# Initialization (instantiate class and call slow functions that get it ready for processing)

my_class = Class()

my_class.set_up(input1=1, input2=2)

# Define main processing function to be used in loop

def calculation(_input_data):

# Perform some functions on _input_data

......

# Call method of instantiate class to act on data

return my_class.class_func(_input_data)

input_data = np.linspace(0, 1, 50)

output_data = np.zeros_like(input_data)

# For Loop (SERIAL implementation)

for i, x in enumerate(input_data):

output_data[i] = calculation(x)

# PARALLEL implementation (this doesn't work well!)

with multiprocessing.Pool(processes=4) as pool:

results = pool.map_async(calculation, input_data)

results.wait()

output_data = results.get()

编辑:我不认为这个问题与建议的问题重复,因为这与Windows和Linunx的不同有关,这在建议的重复问题中根本没有提到。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值