Прежде чем погрузиться в выполнение запросов с использованием многопроцессорности, давайте разберемся, что такое многопроцессорность в Python. Многопроцессорность позволяет компьютеру использовать несколько ядер ЦП для параллельного выполнения задач/процессов. Такое распараллеливание приводит к значительному ускорению в задачах, требующих большого объема вычислений. Некоторым из вас может быть интересно, почему бы нам не использовать эту функцию в наших интересах.
Psycopg2 — самый популярный адаптер PostgreSQL, используемый в Python. Он работает по принципу полной реализации Python DB API 2.0 вместе с безопасностью потоков (одно и то же соединение используется несколькими потоками).
Выполнение запросов на Python с использованием многопроцессорной обработки включает два важных шага
- Чтобы выполнять запросы с использованием Python, сначала установите соединение с базой данных с помощью Psycopg2.
- После установления соединения внедрите многопроцессорный модуль, который поможет выполнить задачу за меньшее время.
Используемая база данных:
Установка соединения с базой данных с помощью Python
Python3
import
psycopg2
def
run():
try
:
# establishing the connection
conn
=
psycopg2.connect(database
=
"root"
, user
=
'root'
,
password
=
'root'
, host
=
'127.0.0.1'
,
port
=
'5432'
)
# Creating a cursor object using the
# cursor() method
cursor
=
conn.cursor()
# Executing an query using the execute() method
cursor.execute(
'''SELECT * FROM root'''
)
(
"Connection established to the database root"
)
# Closing the connection
conn.close()
except
:
(
"Connection not established to the database"
)
# calling the function
run()
Выход:
Установлено соединение с корнем базы данных
Выполнение запросов с использованием многопроцессорности в Python
Python3
from
multiprocessing.connection
import
Connection
import
time,os
from
multiprocessing
import
Pool, freeze_support
import
psycopg2
def
run():
try
:
conn
=
psycopg2.connect(database
=
"root"
, user
=
'root'
,
password
=
'root'
, host
=
'127.0.0.1'
,
port
=
'5432'
)
cursor
=
conn.cursor()
cursor.execute(
'''SELECT * FROM root'''
)
records
=
cursor.fetchall()
return
records
except
:
(
"Connection not established to the database"
)
return
-
1
if
__name__
=
=
"__main__"
:
freeze_support()
(
"Enter the number of times to run the above query"
)
n
=
int
(
input
())
results
=
[]
with Pool(processes
=
os.cpu_count()
-
1
) as pool:
for
_
in
range
(n):
res
=
pool.apply_async(run)
results.append(res)
res
=
[result.get()
for
result
in
results]
(res)
pool.close()
pool.join()
Выход:
Выполнение запросов с использованием многопроцессорности в Python
Заключение
Иногда вы можете ускорить работу, распараллелив их. Несложно попрактиковаться в разбиении задачи на мелкие части, чтобы ее можно было решить гораздо быстрее. Точно так же эти небольшие единицы распределяются между разными рабочими (процессорами) для их решения. Это варьируется от ноутбука к ПК, потому что это зависит от количества ядер, в основном ноутбуки имеют не менее 4, а многие имеют 8, тогда как ПК имеют целых 32. Здесь возникает проблема. Python по умолчанию является однопоточным, он запускает одно ядро за раз. но с помощью многопроцессорного пакета мы можем запустить столько ядер, сколько захотим.