Распределение задач по процессам python multiprocessing

У меня есть задача: По названию найти кучу youtube видео (пишу discord бота). Для этого я использую youtubesearchpython, но обработка 100 песен может затянуться +- на 2 минуты, что меня не устраивает, и я решил распределить по 20 треков в 5 процессов с помощью multiprocessing. Проблема в том, что я запускаю multiprocessing.Pool не из главного файла (run.py => my_bot.load_extension('Bot') => import parser.Parser => multiprocessing.Pool) из за чего у меня запускается 5 копий бота. Я слышал, что нужно использовать if __name__ == "__main__":, но в моём случае это не работает (так как файл не main). Как запустить только нужную мне функцию в 5 процессах?

P.S. Вот мой код:

    async def get_songs(songs: Tuple[str, ...], *, by: str) -> list:
        result = []
        with multiprocessing.Pool(processes=5) as pool:
            step = len(songs) // 5
            args = [{"songs": songs[index: index + step], "by": by} for index in range(0, len(songs), step)]
            for res in pool.map(get_song_process, args):
                result.extend(res)
        return result

P.S.2: У меня была идея написать отдельный файл и в нём уже разбивать задачи на процессы, но мне кажется здесь есть решение лучше


Ответы (1 шт):

Автор решения: Universall

Не важно главный файл или нет, важно чтобы весь код, который не должен лишний раз запускаться сидел в таких if-ах. У вас не виндоуз случайно? Там нужно ещё freezesupport использовать. – CrazyElf

→ Ссылка