Я так над чем-то работал последние несколько дней, и сейчас я нахожусь на заключительном этапе, который добавляет многопроцессорность или многопоточность. Увидев, что выбор объектов 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 (), (это то, что говорит трассировка). Почему это происходит, когда я пытаюсь запустить несколько потоков?