Vin*_*hut 6 python distributed dask
使用dask 0.15.0,分发了1.17.1。
我想记住每个工作人员的一些事情,例如访问Google云存储的客户端,因为实例化它很昂贵。我宁愿将此存储在某种worker属性中。规范的做法是什么?还是全球人走的路?
您可以使用get_worker函数访问本地工作人员。比全局变量更干净的事情是将状态附加到工人身上:
from dask.distributed import get_worker
def my_function(...):
worker = get_worker()
worker.my_personal_state = ...
future = client.submit(my_function, ...)
Run Code Online (Sandbox Code Playgroud)
我们可能应该在worker上添加一个通用的名称空间变量,以充当此类信息的通用场所,但目前还没有。
话虽这么说,对于诸如与外部服务的连接之类的事情,全球并不完全是邪恶的。龙卷风之类的许多系统都使用全局单例。
请注意,工作程序通常是多线程的。如果您的连接对象不是线程安全的,则可能需要为每个线程缓存一个不同的对象。为此,我建议使用一个threading.local对象。达斯克在使用
from distributed.worker import thread_state
Run Code Online (Sandbox Code Playgroud)