Я хочу выполнить ряд операций с базой данных postgresql. Эти операции выполняют выбор таблицы, а затем вставляют результирующие строки в новую таблицу с первичными ключами, игнорируя строки, которые нарушают ограничения первичного ключа. В базе данных имеется большое количество больших таблиц, которые нужно обработать, и кажется, что такого рода задачи должны выполняться асинхронно.
Мне кажется, что одним из способов решения этой проблемы было бы использование модуля subprocess
в Python для запуска сценариев bash, которые выполняют эти операции, используя что-то вроде subprocess.Popen
. Я могу открыть много терминальных сессий и выполнять запросы параллельно, и, насколько я понимаю, этот подход имитирует это.
Чтобы взять пример из здесь :
from subprocess import Popen, PIPE
import glob
f_list = glob.glob('./*bz2')
cmds_list = [['./bunzip2_file.py', file_name] for file_name in f_list]
procs_list = [Popen(cmd, stdout=PIPE, stderr=PIPE) for cmd in cmds_list]
for proc in procs_list:
proc.wait()
Мои вопросы:
Есть ли очевидные проблемы с вызовом многих запросов postgres с использованием subprocess
?
При каких обстоятельствах я мог бы вместо этого рассмотреть использование asyncio
? Предоставляет ли это какие-либо преимущества описанному выше методу?