Плохо работает многопоточность в python
У меня написан скрипт, который посылает requests запросы на сервер и сравнивает их со старыми данными, после чего он их добавляет в БД. Я реализовал это все через многопоточность, но когда у меня существует 1000 пользователей, тогда все работает медленно, как будто однопоточно перебирает 1000 пользователей. Не понимаю в чем проблема, помогите пожалуйста.
Код:
import config
from Requests_inquiry import req
import requests
import mysql.connector
from mysql.connector import Error
from read_sql_config import read_db_config
from threading import *
import asyncio
def requests_message(user_id, wallet):
db_config = read_db_config()
try:
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(buffered=True)
sort = '-timestamp'
limit = 5
response = requests.get('https://apilist.tronscan.org/api/transaction',
params={
'address': wallet,
'limit': limit,
'sort': sort,
})
for num in range(0, limit):
link = 'https://tronscan.org/#/transaction/' + response.json()['data'][num]['hash']
temporary_id = str(id_telegram) + link
cursor.execute(f"""SELECT temporary_id FROM transactions WHERE temporary_id = '{temporary_id}'""")
if cursor.fetchone() is None:
args = (temporary_id, user_id)
cursor.execute(
"INSERT INTO transactions(temporary_id, user_id)"
"VALUES (%s, %s)", args)
conn.commit()
cursor.execute(
"DELETE FROM `transactions` WHERE id < (SELECT MAX(id) - 5 FROM (SELECT * FROM `transactions` WHERE user_id = %s ORDER BY id DESC) tmp) and user_id = %s", (user_id, user_id,))
conn.commit()
else:
pass
except:
pass
class AsyncIterator:
def __init__(self, seq):
self.iter = iter(seq)
def __aiter__(self):
return self
async def __anext__(self):
try:
return next(self.iter)
except StopIteration:
raise StopAsyncIteration
# Перебор полученных данных с БД
async def iter_row():
cursor.execute("SELECT * FROM users")
while True:
rows = cursor.fetchmany(300)
if not rows:
break
async for row in AsyncIterator(rows):
yield row
# Запрос к БД на получение информации о пользователе
async def brute_force():
while True:
async for row in iter_row():
if row[4] == 0:
pass
else:
starting1 = Thread(target=requests_message, args=(row[0], row[1],))
starting1.start()
def start_requessts_mashine():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(brute_force())
loop.close()
if __name__ == "__main__":
starting = Thread(target=start_requessts_mashine)
starting.start()