首页 > 解决方案 > 为什么 Dask 在提交时实例化我的课程?

问题描述

process是我的代码中传递给client.submit. 在它之后传递的所有参数在传递给process.

但是,当我运行下面的代码时,TestClass类型在传递给之前被实例化,process并且 4 被传递给 init。

为什么会这样,如何解决?我在文档中没有看到任何指导我的东西。

完整代码:

from dask.distributed import Client
from dask.distributed import LocalCluster



class TestClass():

    def __init__(self, i):
        print('_________initiated___________') # this line should not be called b4 process runs
        print(i)
        pass

def process(c):

    print('-----------------')
    print(type(c)) # c should be type and not class '__main__.TestClass'
    return isinstance(c, tuple)

if __name__ == '__main__':
    cluster = LocalCluster(n_workers=4)
    client = Client(cluster)
    r = client.submit(process, (TestClass, 4) )

    r.result()

标签: pythonmultiprocessingdask

解决方案


您的问题的解决方案很简单:使用列表而不是元组。在某些情况下,Dask 使用元组对 func-and-args 进行编码,看来您在这里触发了该逻辑。

r = client.submit(process, [TestClass, 4] )

做你想做的事。显然,您的函数可能需要稍作修改才能处理列表。


推荐阅读