Python 2.7 达斯克分布。如何在正在计算的函数中获取任务密钥ID?

Python 2.7 达斯克分布。如何在正在计算的函数中获取任务密钥ID?,python-2.7,distributed,distributed-computing,dask,Python 2.7,Distributed,Distributed Computing,Dask,我使用dask.distributed进行的计算包括创建中间文件,其名称包括UUID4,用于标识该工作块 pairs = '{}\n{}\n{}\n{}'.format(list1, list2, list3, ...) file_path = os.path.join(job_output_root, 'pairs', 'pairs-{}.txt'.format(str(uuid.uuid4()).replace('-

我使用dask.distributed进行的计算包括创建中间文件,其名称包括UUID4,用于标识该工作块

    pairs = '{}\n{}\n{}\n{}'.format(list1, list2, list3, ...)

    file_path = os.path.join(job_output_root, 'pairs',
                             'pairs-{}.txt'.format(str(uuid.uuid4()).replace('-', '')))

    file(file_path, 'wt').writelines(pairs)
同时,dask分布式集群中的所有任务都有唯一的密钥。因此,使用该密钥ID作为文件名是很自然的


有可能吗?

有两种解决问题的方法:

  • 确定uuid并将其传递给Dask(已实现)
  • Dask确定uuid并将其传递给函数(未实现,但可能)
  • 将uuid传递给Dask 函数,如
    .submit
    接受
    key=
    关键字参数,在该参数中可以指定要使用的键

    >>> e.submit(inc, 1, key='inc-12345')
    <Future: status: pending, key: inc-12345>
    
    你从达斯克那里拿到钥匙 在执行每个任务期间,调度器将这样的上下文信息放置到每个线程全局中。从1.13版开始,此版本可按如下方式提供:

    def your_function(...):
        from distributed.worker import thread_state
        key = thread_state.key
    
    future = e.submit(your_function, ...)
    

    第一种变体就足够了。它是否以同样的方式与
    map
    一起工作?看起来不是…真的不是。不过,在循环中提交应该可以很好地工作
    def your_function(...):
        from distributed.worker import thread_state
        key = thread_state.key
    
    future = e.submit(your_function, ...)