Python Threading Concept Вопрос - PullRequest
       3

Python Threading Concept Вопрос

5 голосов
/ 12 октября 2010

Я сейчас нахожусь в процессе написания клиент-серверного приложения в качестве упражнения, и до сих пор я получил почти все для работы, но есть умственное препятствие, из-за которого я не смог успешно гуглить сам,

Правильно ли я считаю, что в серверном приложении потоковая обработка обработчика пакетов и базы данных для работы из стека является правильным решением?Идея состоит в том, что один поток зацикливает прослушивание пакетов и добавляет данные в стек, а затем другой поток извлекает данные из нижней части стека и выполняет некоторые проверки в отношении базы данных 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()

1 Ответ

4 голосов
/ 12 октября 2010

Это то, для чего очереди .Замените стек на очередь, и нет, вам не придется использовать другие методы синхронизации.Кстати, многопроцессорная обработка лучше, чем многопоточность, поскольку она может использовать преимущества многоядерных / многопоточных процессоров.Интерфейсы очень похожи, поэтому стоит обратить внимание на переключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...