并行 Dask For 循环
Dask For Loop In Parallel
我正在尝试寻找正确的语法来使用 for 循环并延迟 dask。我找到了几个教程和其他问题,但 none 符合我的条件,这是非常基础的。
首先,这是 运行 并行 for 循环的正确方法吗?
%%time
list_names=['a','b','c','d']
keep_return=[]
@delayed
def loop_dummy(target):
for i in range (1000000000):
pass
print('passed value is:'+target)
return(1)
for i in list_names:
c=loop_dummy(i)
keep_return.append(c)
total = delayed(sum)(keep_return)
total.compute()
这产生了
passed value is:a
passed value is:b
passed value is:c
passed value is:d
Wall time: 1min 53s
如果我运行这是连续的,
%%time
list_names=['a','b','c','d']
keep_return=[]
def loop_dummy(target):
for i in range (1000000000):
pass
print('passed value is:'+target)
return(1)
for i in list_names:
c=loop_dummy(i)
keep_return.append(c)
它实际上更快。
passed value is:a
passed value is:b
passed value is:c
passed value is:d
Wall time: 1min 49s
我看过一些例子,其中指出 Dask 有少量开销,但这似乎需要足够长的时间来证明,不是吗?
我的实际 for 循环涉及更繁重的计算,我在其中为各种目标构建模型。
这个计算
for i in range(...):
pass
受全局解释器锁(GIL)约束。您将希望使用多处理或 dask.distributed Dask 后端而不是默认的线程后端。我推荐以下内容:
total.compute(scheduler='multiprocessing')
但是,如果您的实际计算主要是 Numpy/Pandas/Scikit-Learn/Other 数字包代码,那么默认线程后端可能是正确的选择。
有关在调度程序之间进行选择的更多信息,请参见此处:http://dask.pydata.org/en/latest/scheduling.html
我正在尝试寻找正确的语法来使用 for 循环并延迟 dask。我找到了几个教程和其他问题,但 none 符合我的条件,这是非常基础的。
首先,这是 运行 并行 for 循环的正确方法吗?
%%time
list_names=['a','b','c','d']
keep_return=[]
@delayed
def loop_dummy(target):
for i in range (1000000000):
pass
print('passed value is:'+target)
return(1)
for i in list_names:
c=loop_dummy(i)
keep_return.append(c)
total = delayed(sum)(keep_return)
total.compute()
这产生了
passed value is:a
passed value is:b
passed value is:c
passed value is:d
Wall time: 1min 53s
如果我运行这是连续的,
%%time
list_names=['a','b','c','d']
keep_return=[]
def loop_dummy(target):
for i in range (1000000000):
pass
print('passed value is:'+target)
return(1)
for i in list_names:
c=loop_dummy(i)
keep_return.append(c)
它实际上更快。
passed value is:a
passed value is:b
passed value is:c
passed value is:d
Wall time: 1min 49s
我看过一些例子,其中指出 Dask 有少量开销,但这似乎需要足够长的时间来证明,不是吗?
我的实际 for 循环涉及更繁重的计算,我在其中为各种目标构建模型。
这个计算
for i in range(...):
pass
受全局解释器锁(GIL)约束。您将希望使用多处理或 dask.distributed Dask 后端而不是默认的线程后端。我推荐以下内容:
total.compute(scheduler='multiprocessing')
但是,如果您的实际计算主要是 Numpy/Pandas/Scikit-Learn/Other 数字包代码,那么默认线程后端可能是正确的选择。
有关在调度程序之间进行选择的更多信息,请参见此处:http://dask.pydata.org/en/latest/scheduling.html