python - 为什么 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()
解决方案
您的问题的解决方案很简单:使用列表而不是元组。在某些情况下,Dask 使用元组对 func-and-args 进行编码,看来您在这里触发了该逻辑。
r = client.submit(process, [TestClass, 4] )
做你想做的事。显然,您的函数可能需要稍作修改才能处理列表。
推荐阅读
- javascript - 初始化后在 Vue 中使用 Mapbox GL JS
- r - 将表或表数组的元素添加到 R 中的数据框
- html - HTML隐藏不提交
- javascript - 在单个网格对象的单个 ThreeJS 场景中同步多个客户端视角
- children - 跟踪 AMI 后代的最佳方法是什么?
- android - 工具栏不允许在其中使用匹配父布局
- java - 使用滑块方法浏览大量图像
- azure-gov - 公共云中的应用程序是否可以被授权通过图形 api 从政府租户获取数据?
- azure - 接收者未收到 Mass Transit 的消息 - 订阅
- java - Java SpringBoot Postgres 删除行