我有一个任务:按标题查找一堆 youtube 视频(我正在编写一个不和谐的机器人)。为此,我使用youtubesearchpython,但处理 100 首歌曲可能需要 + - 2 分钟,这不适合我,我决定使用 . 将 20 首曲目分配到 5 个进程中multiprocessing。问题是我multiprocessing.Pool没有从主文件(run.py=> my_bot.load_extension('Bot')=> import parser.Parser=> multiprocessing.Pool)运行,因此我运行了 5 个机器人副本。我听说要使用if __name__ == "__main__":,但在我的情况下它不起作用(因为文件不是主文件)。如何在 5 个进程中只运行我需要的功能?
PS这是我的代码:
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
PS2:我有一个想法,写一个单独的文件并将任务拆分为其中的进程,但我认为这里有更好的解决方案
1 个回答