使用dask 0.15.0,分布式1.17.1。
我想记住每个工作人员的一些事情,比如访问谷歌云存储的客户端,因为实例化它是昂贵的。我宁愿将其存储在某种工作者属性中。执行此操作的规范方法是什么?或者全局变量是正确的选择吗?
关于工人
您可以通过以下方式访问本地工作人员获取工人 http://distributed.readthedocs.io/en/latest/api.html#distributed.get_worker功能。比全局变量稍微干净一点的事情是将状态附加到工作线程:
from dask.distributed import get_worker
def my_function(...):
worker = get_worker()
worker.my_personal_state = ...
future = client.submit(my_function, ...)
我们可能应该在工作人员上添加一个通用名称空间变量,作为此类信息的通用位置,但目前还没有。
作为全局变量
尽管如此,对于与外部服务全局的连接之类的事情来说并不完全是邪恶的。许多系统(例如 Tornado)都使用全局单例。
如果你关心线程安全
请注意,工作人员通常是多线程的。如果您的连接对象不是线程安全的,那么您可能需要为每个线程缓存不同的对象。为此,我建议使用threading.local
目的。 Dask 使用一个 at
from distributed.worker import thread_state
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)