Ожидание сопрограммы и присвоение результата переменной вне сопрограммы - PullRequest
0 голосов
/ 30 января 2020

Я хотел бы иметь возможность создать файл утилит, к которому я могу обращаться, используя список команд, все запрашивающие данные из базы данных:

import asyncpg

async def is_registered(ctx):
    pg_con = await asyncpg.create_pool(database="Db", user="postgres", password=db_pw)
    registered = await pg_con.execute("SELECT EXISTS (SELECT 1 FROM users WHERE user_id = $1)", ctx.author.id)
    if registered:
        await ctx.send("hi")
        return True
    else:
        return False

async def is_registered(ctx): #another function
    pg_con = await asyncpg.create_pool(database="Db", user="postgres", password=db_pw)
    registered = await pg_con.execute("SELECT EXISTS (SELECT 1 FROM users WHERE user_id = $1)", ctx.author.id)
    if registered:
        await ctx.send("hi")
        return True
    else:
        return False

...

и так далее. Я хотел бы вызвать эти функции в другом файле, используя import. Есть ли недостатки в названии pg_con каждый раз, и есть ли способ справиться с этим, чтобы мне не пришлось? И есть ли лучшие способы справиться с этим?

1 Ответ

0 голосов
/ 30 января 2020

Нет смысла использовать пул соединений для выполнения одного запроса, и установление соединения / пула каждый раз будет намного медленнее.

Лучший способ справиться с этим - подкласс Bot и добавьте пул соединений в качестве атрибута.
Таким образом, есть единственный пул, к которому вы можете получить доступ через Context.bot.

Также обратите внимание в вашем примере вы отслеживаете функцию.

...