Итак, я пытаюсь отправить извещение о разногласиях различным веб-зацепкам, и моя идея состоит в том, чтобы отправить его как можно скорее разным веб-зацепкам, чтобы между ними было меньше секунд.Сейчас между каждым уведомлением проходит 1,5 - 2 секунды, и мне интересно, как я могу оптимизировать его еще лучше.
Я начал использовать нить для каждого отправляющего уведомления, но я использовал функцию with lock
, чтобы она запускалась по одному и так, чтобы консоль не спамила, а также делала ее поточно-ориентированной, так как многопоточность идет по ошибке.
Что я сделал, это:
def sendData(webhook, data):
with lock:
while True:
try:
response = requests.post(webhook, data=json.dumps(data), headers={'Content-Type': 'application/json'})
if response.status_code == 200:
logger.success('Sent to Discord')
logger.success(datetime.utcnow().strftime('%H:%M:%S.%f')[:-3])
break
elif response.status_code == 429:
sleep_time = int(response.headers['retry-after']) / 1000
logger.status('Rate limited! Please wait ' + str(sleep_time) + ' seconds')
time.sleep(sleep_time)
else:
raise ValueError(
'Request to slack returned an error %s, the response is:\n%s' % (
response.status_code, response.text))
except HTTPError as err:
randomtime = random.randint(0, 1)
logger.error('Retrying in {} secs'.format(randomtime))
time.sleep(randomtime)
continue
, и мой вопрос заключается в том, как я могу ускорить время между каждой отправкой, не вызывая каких-либо проблем с потоками?
РЕДАКТИРОВАТЬ:
Так что, в принципе, если я уберу with lock
, это произойдет с моей консолью:
Как вы можете видеть, все это грязно, потому чтопотоки работают довольно быстро, и я предполагаю, что они конфликтуют друг с другом, и это также дало бы мне много ограничений по скорости из-за его быстрой отправки и в основном не будет ждать, пока не завершится, так как остальные другие потоки будут работатьвсе время.
Теперь с замком это выглядит так:
и, как вы можете видеть, это выглядит намного лучшеBt нет у меня нет миллисекунд, ноиногда для отправки разногласия может потребоваться от 1,5 до 2 секунд.