ошибка ssl сокета при использовании потоков с python3 .7 - PullRequest
0 голосов
/ 30 апреля 2020

Я так над чем-то работал последние несколько дней, и сейчас я нахожусь на заключительном этапе, который добавляет многопроцессорность или многопоточность. Увидев, что выбор объектов SSLSocket в многопроцессорной среде не прост, я решил go с многопоточностью (я выбрал это также потому, что он предназначен для выполнения веб-запросов, которые являются вводом-выводом). Я добавил часть потока в свой код, и если я запускаю только один отдельный поток, он работает нормально, но после добавления двух потоков он начинает выдавать ошибки, которых я никогда раньше не видел.

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = ssl.wrap_socket(s, keyfile=None, certfile=None, server_side=False, cert_reqs=ssl.CERT_NONE,          ssl_version=ssl.PROTOCOL_SSLv23)
t1 = threading.Thread(target=check, args=(s,))
t1.start()
t2 = threading.Thread(target=check, args=(s,))
t2.start()

это имя if _ == основной части моего кода. Я поместил это здесь, чтобы при вызове других функций я мог передать сокет в функцию и повторно использовать соединение. Вот моя функция:

def check(socket):
    for x in range(5):
        uid_data = []
        socket.settimeout(.5)
        socket.send()
        while True:
            try:
                response = socket.recv(4094)
                uid_data.append(response)
            except Exception as e:
                break

Позвольте мне начать с того, что этот код прекрасно работает без потоков и процессов. Так что я знаю, что это не мой код. Я действительно не знаю, что происходит, потому что это работает около 3-4 попыток, а затем ошибка. Вот обратная трассировка:

    return self._sslobj.write(data)
    OSErrorreturn self._sslobj.write(data):
    [Errno 0] ErrorOSError
    : [Errno 0] Error

Это из строки socket.send (), (это то, что говорит трассировка). Почему это происходит, когда я пытаюсь запустить несколько потоков?

...