Мои сервисные модули не распознаются Dask - PullRequest
0 голосов
/ 03 марта 2020

У меня есть служба, у меня есть несколько модулей, и в основной файл я импортирую большинство своих модулей, как показано ниже.

from base_client import BaseClient
import request_dispatcher as rd
import utils as util

В одной из функций в основном я вызываю клиента dask Отправить. Когда я пытаюсь получить результат из будущего объекта, он выдает ошибку по модулю, как показано ниже

**** ModuleNotFoundError: Нет модуля с именем base_client ****

Вот как я определить мой клиент и вызвать функцию

def mytask(url, dest):
   .....

client = Client(<scheduler ip>)
f_obj = client.submit(mytask, data_url, destination)

Как именно я могу сделать эти модули доступными для планировщика и работников?

1 Ответ

0 голосов
/ 05 мая 2020

Когда вы делаете submit, Dask завершает вашу задачу и отправляет ее работнику (-ям). В рамках этого пакета все переменные, которые требуются для задачи, также сериализуются и отправляются. В случае встроенных функций это включает в себя всю функцию, но в случае функций в модуле это только имена модулей и функций. Это делается для того же процессора и пропускной способности (представьте, что вы пытаетесь отправить все источники всех модулей, которые вы импортировали). На рабочей стороне задача unwrappd, а для функции это означает импорт модуля import base_client. Это следует за обычным python logi c поиска в местах, определенных sys.path. Если файл, определяющий модуль, отсутствует, вы получите сообщение об ошибке выше.

Чтобы решить, скопируйте файл в место, где его может увидеть рабочий. Вы можете сделать это с upload_file на временной основе (которая использует временный каталог), но вам лучше установить модуль, используя обычные pip или conda методы. Импорт из «текущего каталога», скорее всего, не удастся даже с локальным кластером.

Чтобы получить больше информации, вам нужно опубликовать полный пример, который показывает проблему. На практике функции, использующие импорт из модулей, все время используются с submit без проблем.

...