我正在尝试使用延迟延迟的for循环找到正确的语法。我发现了一些教程和其他问题,但都不适合我的情况,这是非常基础的。
首先,这是并行运行for循环的正确方法吗?
var smtpTransport = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 587,
auth: {
user: "username@gmail.com",
pass: "app password"
}
});
产生了
from: 'My Pro App Name <username@gmail.com>'
如果我以串行方式运行它,
%%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
我看过一些示例,其中说达斯克的开销很小,但这似乎花费了足够长的时间来证明,不是吗?
我的实际for循环涉及大量计算,因此我为各种目标建立了模型。
答案 0 :(得分:5)
此计算
for i in range(...):
pass
受GIL约束。您将要使用multiprocessing或dask.distributed Dask后端,而不是默认的线程后端。我建议以下内容:
total.compute(scheduler='multiprocessing)
但是,如果您的实际计算主要是Numpy / Pandas / Scikit-Learn /其他数字程序包代码,则默认的线程后端可能是正确的选择。
有关在调度程序之间进行选择的更多信息,请参见:http://dask.pydata.org/en/latest/scheduling.html