Я сейчас нахожусь в процессе написания клиент-серверного приложения в качестве упражнения, и до сих пор я получил почти все для работы, но есть умственное препятствие, из-за которого я не смог успешно гуглить сам,
Правильно ли я считаю, что в серверном приложении потоковая обработка обработчика пакетов и базы данных для работы из стека является правильным решением?Идея состоит в том, что один поток зацикливает прослушивание пакетов и добавляет данные в стек, а затем другой поток извлекает данные из нижней части стека и выполняет некоторые проверки в отношении базы данных SQL.
В этом конкретном случаедля обработчика пакетов более важно продолжать работать.Я предполагаю, что мой вопрос заключается в том, является ли это подходящим использованием потоков, и где я собираюсь столкнуться с проблемами, которые требуют блокировки потоков, например, должен ли я блокировать обработчик БД, когда поток пакетов добавляется в стек, чтобы избежать проблемы с попыткойписать и читать, скажем, единственное значение в стеке и т. д.
Спасибо всем!
Вот фрагмент кода, учтите, что он выполняется, поэтому не судите, такжемоя первая попытка на python (которой я сейчас наслаждаюсь больше, чем perl или php!).
class socketListen(threading.Thread):
def run(self):
while True:
datagram = s.recv('1024')
if not datagram:
break
packetArray = datagram.split(',')
if packetArray[0] = '31337':
listHandle.put(packetArray)
s.close()
class stackOperations(threading.Thread):
def run(self):
while True:
#pull the last item off the stack and run ops on it
#listHandle.getLast is the last item on the queue
def
class listHandle():
def put(shiftData):
if not mainStack:
mainStack = []
mainStack.insert(0,shiftData)
def getLast:
return mainStack.pop()