У меня есть универсальный многопроцессорный сценарий c, который может запускать любую задачу в многопроцессорной настройке. Я добавляю задачу как аргумент командной строки и использую getattr для вызова функций во внедренном коде.
taskModule = importlib.import_module(taskFile.replace(".py", ""))
taskContext = getattr(taskModule, 'init')()
response = pool.map_async(getattr(taskModule, 'run'), inputList)
Функция init () создает все соответствующие переменные для выполнения задачи и возвращает их как dict объект - taskContext. inputList - это список объектов dict, каждый dict содержит как объект taskContext, так и указанный c элемент, который нужно обработать, так что каждый процесс получает уникальный элемент для обработки вместе с копией контекста, требуемого задачей.
Одна из этих задач предназначена для FTP, и taskContext в этом случае содержит информацию о FTP-сервере вместе с другими деталями. Функция запуска в задаче FTP в значительной степени открывает соединение с использованием переменных контекста, загружает необходимые файлы и закрывает его, и это отлично работает.
Однако я думаю, что было бы хорошо, если бы я мог настроить пул соединений с несколькими FTP-соединениями в начале, как часть функции init () при создании контекста, а затем использовать их по мере доступности в методе запуска, очень похоже на пул соединений с БД, который предотвращает нужно каждый раз открывать и закрывать подключения к базе данных.
Это вообще возможно? Если да, то как лучше всего go сделать это?