Здравствуйте.
Цель работы: передача данных из php скрипта в python
Для решения этой задачи я решил использовать socket ( модуль “socket” для python и socket_create для php).
Потом я столкнулся с проблемой, что после 2-3 часов скрипт выдаёт фатальную ошибку “segmentation fault”. Повторюсь, выдаёт не сразу после запуска, а через несколько часов исправной работы.
Код и скриншот ошибки ниже:
def Socket_Server_start():
socket_finder = socket.socket()
socket_finder.bind(('', 10999))
socket_finder.listen(1000)
while True:
connect, addr = socket_finder.accept() #Принимаем входящие соединение
threading.Thread(target=NewConnect, args=(connect, addr,)).start() #Создаём новый поток для работы с сокетом
del connect, addr
Socket_Server_start() #Запускаем сокет-сервер
После неуспеха с socket я решил использовать ZerpMQ
Ситуация осталась точно такой же (после нескольких часов работы скрипт вылетал).
Код и скриншот ошибки ниже:
def Socket_Server_start():
global client, messages
context = zmq.Context()
client = context.socket(zmq.ROUTER) #Создаём сервер
client.bind("tcp://*:5556")
poll = zmq.Poller()
poll.register(client, zmq.POLLIN) #Слушаем клиентов
while True:
sockets = dict(poll.poll(1000))
if sockets:
identity = client.recv().decode() #ID клиента
msg = client.recv().decode().split("|") #Сообщение от клиента
#Неважные строчки кода
if identity not in messages: #Если пользователь с данным ID не подключался
messages[identity] = [] #Добавляем ID клиента в переменную
threading.Thread(target=NewConnect, args=(ZeroMQ(identity),)).start() #Запускаем поток для работы с сокетом
else:
messages[identity].append(msg) #Клиент уже есть в в переменной -> добавляем сообщение
Socket_Server_start()