Передать файл через сокет python
Я имею следующее
Client.py
def get_path_file(self):
try:
file_path, _ = QFileDialog.getOpenFileName(self, )
file = open(str(file_path), mode="rb")
full_name = os.path.basename(file_path)
while True:
x = file.read(1000)
print(f"X --- {x}")
if not x: break
list_for_server = ["FILE", IDRoom, self.nick_name, self.listWidget_people.currentItem().text(),x, full_name]
list_for_server = pickle.dumps(list_for_server)
self.cl.send_data(list_for_server)
except FileNotFoundError:
pass
Server.py
while True: # Accepting a message
self.signal = socket_user.recv(4096)
self.signal = pickle.loads(self.signal)
Короче говоря, я передаю файл по частям, и сервер принимает его, НО после второй итерации я получаю эту ошибку, именно после второй итерации.
File "/home/n76/.pyenv/versions/3.10.0/lib/python3.10/threading.py", line 1009, in _bootstrap_inner
self.run()
File "/home/n76/.pyenv/versions/3.10.0/lib/python3.10/threading.py", line 946, in run
self._target(*self._args, **self._kwargs)
File "/home/n76/PycharmProjects/pythonProject/server.py", line 43, in listen_socket
self.signal = pickle.loads(self.signal)
_pickle.UnpicklingError: invalid load key, ' '.
Однако, если я добавлю time.sleep, все отлично работает, и ошибка не возникает
def get_path_file(self):
try:
file_path, _ = QFileDialog.getOpenFileName(self, )
file = open(str(file_path), mode="rb")
full_name = os.path.basename(file_path)
for IDRoom, nameRoom in self.roomsForLoad[0].items():
if self.listWidget_people.currentItem().text() == nameRoom:
while True:
time.sleep(0.1) #<--------- THIS
x = file.read(1000)
print(f"X --- {x}")
if not x: break
list_for_server = ["FILE", IDRoom, self.nick_name, self.listWidget_people.currentItem().text(),
x, full_name]
list_for_server = pickle.dumps(list_for_server)
self.cl.send_data(list_for_server)
except FileNotFoundError:
pass
Может питон физически не успевает принимать так быстро списки?