Python - Использование 'с блокировкой потоков' занимает 1,5 секунды для запуска каждого потока - PullRequest
0 голосов
/ 16 октября 2018

Итак, я пытаюсь отправить извещение о разногласиях различным веб-зацепкам, и моя идея состоит в том, чтобы отправить его как можно скорее разным веб-зацепкам, чтобы между ними было меньше секунд.Сейчас между каждым уведомлением проходит 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, это произойдет с моей консолью:

Pic 1

Как вы можете видеть, все это грязно, потому чтопотоки работают довольно быстро, и я предполагаю, что они конфликтуют друг с другом, и это также дало бы мне много ограничений по скорости из-за его быстрой отправки и в основном не будет ждать, пока не завершится, так как остальные другие потоки будут работатьвсе время.

Теперь с замком это выглядит так:

Pic2

и, как вы можете видеть, это выглядит намного лучшеBt нет у меня нет миллисекунд, ноиногда для отправки разногласия может потребоваться от 1,5 до 2 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...