【发布时间】:2018-10-06 20:18:53
【问题描述】:
我正在阅读dask.distributed 上的文档,看起来我可以通过client.submit() 向分布式集群提交函数。
我有一个现有的函数some_func 异步获取单个文档(例如,文本文件),我想获取原始文档并获取所有不包含元音的单词并将其推回另一个数据库。此数据处理步骤正在阻塞。
假设有几百万个文档,分布式集群只有 10 个节点和 1 个可用进程(即一次只能处理 10 个文档),dask.distributed 将如何处理它需要的文档流处理?
这里是一些示例代码:
client = dask.distributed('tcp://1.2.3.4:8786')
def some_func():
doc = retrieve_next_document_asynchronously()
client.submit(get_vowelless_words, doc)
def get_vowelless_words(doc):
vowelless_words = process(doc)
write_to_database(vowelless_words)
if __name__ == '__main__':
for i in range(1000000):
some_func()
由于一个文档的处理是阻塞的,并且集群只能同时处理 10 个文档,如果在集群忙的时候检索到 30 个其他文档会发生什么?我知道client.submit() 是异步的,它会返回一个并发的未来,但在这种情况下会发生什么?它是否会将文档保存在内存中,直到它有 1/10 个内核可用,并可能导致机器在有 1,000 个文档等待之后耗尽内存。
在这种情况下调度程序会做什么?先进先出?我是否应该以某种方式更改代码,以便在检索下一个文档之前等待核心可用?那怎么可能实现?
【问题讨论】:
标签: dask dask-distributed