Я надеялся использовать aioodbc с асинхронным семафором для вставки строк в базу данных. Ниже будут записаны некоторые строки в базу данных назначения, но, похоже, они заблокированы вокруг Семпахора value
+1. Любое предложение о том, как переработать это или решить блок / спор?
Определение таблицы:
create table async_testing (
insert_id int null
)
Асинхронный код:
import asyncio
import aioodbc
loop = asyncio.get_event_loop()
async def odbc_insert_worker(semaphore, value, conn):
await semaphore.acquire()
print("Acquire Semaphore")
async with conn.cursor() as cur:
await cur.execute('INSERT INTO async_testing VALUES (?)', value)
print("Release Semaphore")
semaphore.release()
async def db_main(loop, values):
dsn="foo"
values = list(values)
db_semaphore = asyncio.Semaphore(value=15)
async with aioodbc.create_pool(dsn=dsn, loop=loop, autocommit=True) as pool:
async with pool.acquire() as conn:
tasks = [odbc_insert_worker(db_semaphore, value, conn) for value in values]
await asyncio.gather(*tasks)
fmt_vals = range(0,1000)
loop.run_until_complete(db_main(loop, fmt_vals))