Я ' m в настоящее время находится в процессе написания клиент-серверного приложения в качестве упражнения, и у меня есть почти все для работы, но есть психическое препятствие, которое я не смог успешно преодолеть в Google.
Правильно ли я полагаю, что в серверном приложении распараллеливает обработчик пакетов и обработчик базы данных для работы из стека? Идея состоит в том, что один поток выполняет цикл прослушивания пакетов и добавляет данные в стек, а затем другой поток извлекает данные из нижней части стека и выполняет некоторые проверки по базе данных SQL.
В этом конкретном случае это больше важно, чтобы обработчик пакетов продолжал работать. Я предполагаю, что мой вопрос в том, является ли это подходящим использованием потоков и где я собираюсь столкнуться с проблемами, требующими блокировки потоков, например, следует ли блокировать обработчик базы данных, когда поток пакетов добавляет в стек, чтобы избежать проблем с попыткой записи и чтения, скажем, единственного значения в стеке и т. д.
Всем спасибо!
Вот фрагмент code, заметьте, он в процессе, так что не судите, а также моя первая попытка использовать 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()