使用dask 0.15.0,分布式1.17.1。
我想要记住每个工作人员的一些事情,比如访问google云存储的客户端,因为实例化它的成本很高。我更愿意将其存储在某种worker属性中。做这件事的规范方法是什么?或者,全球化是未来的发展方向吗?
发布于 2017-07-10 20:19:40
在工人身上
您可以使用get_worker函数访问本地worker。比全局变量更简洁的一件事是将state附加到worker:
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在
from distributed.worker import thread_state发布于 2019-07-11 15:14:41
https://stackoverflow.com/questions/45008852
复制相似问题