#python #multiprocessing
Вопрос:
Я создаю приложение для чата, в котором использую многопроцессорную обработку. Код был слишком большим, поэтому я отправляю только основную часть кода, Спасибо за вашу помощь
Код
import socket,select
from multiprocessing import Process
HEADER_LENGTH = 10
IP = socket.gethostbyname(socket.gethostname())
PORT = 1234
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((IP, PORT))
server_socket.listen()
sockets_list = [server_socket]
clients = {}
def Run_Server():
def receive_message(client_socket):
try:
message_header = client_socket.recv(HEADER_LENGTH)
if not len(message_header):
return False
message_length = int(message_header.decode('utf-8').strip())
return {'header': message_header,'data':client_socket.recv(message_length)}
except:
return False
while True:
read_sockets, _, exception_sockets = select.select(sockets_list[],sockets_list)
for notified_socket in read_sockets:
if notified_socket == server_socket:
client_socket, client_address = server_socket.accept()
user = receive_message(client_socket)
if user is False:
continue
sockets_list.append(client_socket)
clients[client_socket] = user
print('Accepted new connection')
else:
message = receive_message(notified_socket)
if message is False:
print('Closed connection ')
sockets_list.remove(notified_socket)
del clients[notified_socket]
continue
user = clients[notified_socket]
print(f'Received message')
for client_socket in clients:
if client_socket != notified_socket:
client_socket.send(user['header'] )
for notified_socket in exception_sockets:
sockets_list.remove(notified_socket)
del clients[notified_socket]
if __name__ =='__main__' :
p1= Process(target=Run_Server)
p1.start()
p1.join()
Вывод
пустой
, но он должен загружать сервер, чтобы я мог с ним работать. Я видел много подобных вопросов, но не мог исправить ошибку, пожалуйста, скажите, что не так. Я пытался обойтись без p1.join()
, но все еще не работает, пожалуйста, помогите мне.
Комментарии:
1. Каждый процесс имеет свои собственные переменные (если только вы не используете специальные типы
multiprocessing
, созданные для синхронизации процессов).2. Так как же мне это исправить
3. Я бы использовал потоки вместо процессов.
4. Отправьте свой код, который не сработал!
5. Большое спасибо за вашу помощь, я использовал темы, и это сработало