使用dask 0.15.0,分发1.17.1。
我想记住每个工作人员的一些事情,比如访问谷歌云存储的客户端,因为实例化它很昂贵。我宁愿把它存储在某种工人属性中。这样做的规范方法是什么?或者全局变量是要走的路?
答案 0 :(得分:4)
您可以使用get_worker功能访问本地工作人员。比全局变量更简洁的是将状态附加到worker:
from dask.distributed import get_worker
def my_function(...):
worker = get_worker()
worker.my_personal_state = ...
future = client.submit(my_function, ...)
我们应该在worker上添加一个通用命名空间变量,作为这样的信息的一般位置,但还没有。
尽管如此,对于与外部服务连接的事情,全局变量并不完全是邪恶的。像Tornado这样的许多系统使用全球单身人士。
请注意,工作人员通常是多线程的。如果您的连接对象不是线程安全的,那么您可能需要为每个线程缓存一个不同的对象。为此,我建议使用threading.local
对象。 Dask在
from distributed.worker import thread_state
答案 1 :(得分:0)