首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在dask/distributed中存储工作局部变量

如何在dask/distributed中存储工作局部变量
EN

Stack Overflow用户
提问于 2017-07-10 17:50:20
回答 2查看 894关注 0票数 8

使用dask 0.15.0,分布式1.17.1。

我想要记住每个工作人员的一些事情,比如访问google云存储的客户端,因为实例化它的成本很高。我更愿意将其存储在某种worker属性中。做这件事的规范方法是什么?或者,全球化是未来的发展方向吗?

EN

回答 2

Stack Overflow用户

发布于 2017-07-10 20:19:40

在工人身上

您可以使用get_worker函数访问本地worker。比全局变量更简洁的一件事是将state附加到worker:

代码语言:javascript
复制
from dask.distributed import get_worker

def my_function(...):
    worker = get_worker()
    worker.my_personal_state = ...

future = client.submit(my_function, ...)

我们可能应该在workers上添加一个通用的命名空间变量,作为存储此类信息的通用位置,但现在还没有。

作为全局变量

话虽如此,但像连接到外部服务这样的东西,全局并不完全是邪恶的。许多像Tornado这样的系统都使用全局单例。

如果您关心线程安全性

请注意,工作线程通常是多线程的。如果您的连接对象不是threadsafe,那么您可能需要为每个线程缓存一个不同的对象。为此,我建议使用threading.local对象。Dask在

代码语言:javascript
复制
from distributed.worker import thread_state
票数 7
EN

Stack Overflow用户

发布于 2019-07-11 15:14:41

任务执行元

对于更简单的用例,其他解决方案可能更可取;但是,值得考虑Actors。Actor目前是Dask中的一个实验性功能,它支持有状态计算。

Dask Actors

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45008852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档