Задать вопрос
@vlad2vlad

Как использовать асинхронну функцию в Pool.map в Python?

Есть файл input.txt с id пользователей Discord, нужно вывести в output.txt их юзернеймы.
Все получается, но медленно, нужно использовать многопоточность. Я никогда не занимался multiprocessing.
В вот таком коде:
from discord.ext import commands
from multiprocessing import Pool

async def getusername(id):
  try:
    user = await client.fetch_user(int(id))
    output.append(user)
    print(id, user)
  except:
    pass
with open("input.txt", "r", encoding='UTF-8') as file:
    src = file.readlines()
output = []
client = commands.Bot(command_prefix=".")
@client.event
async def on_ready():
    print('Start')
    for i in src:
        i = i.strip()
    p = Pool(20)
    p.map(await getusername, src) #ошибка здесь
    with open("output.txt", "w", encoding='utf-8') as file:
        for i in output:
            file.write(str(i)+'\n')

    await client.close()
    print("Finish")
    input()
client.run('token’)

Возникает ошибка на отмеченной комментарием строчке:
TypeError: object function can’t be used in ‘await’ expression

Если оттуда убрать await, появляется другая ошибка:
RuntimeError: coroutine “getusername” was never awaited

Понятно, что в метод .map нужно передать функцию с await, только не знаю, как правильно написать.
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы