2016-03-18 3 views
0

У меня есть сервер, берущий данные TCP и порождающие потоки, чтобы разобрать и обработать данные. Я заметил, что если он начинает получать слишком много соединений, что-то пошло не так, и он начинает прерываться, поэтому после охоты я обнаружил, что моя очередь постоянно получает все больше и больше данных, хотя я постоянно использую q.get().Python Queue - Почему он все еще растет?

Отрывок из разгрузочной нити очереди:

def QDUmp(): 
    while 1: 
     if not q.empty(): 

      data= str(q.get()) 
      ParseThread = Thread(target = ParseFunction(data)) 
      ParseThread.start() 

CheckQ = Thread(target = QDUmp) 
CheckQ.start() 

Данные постоянно добавляются в TCP только с Standart поставить как этот псевдо:

q = Queue.Queue() 

For eachdata from Socket: 
    q.put(eachdata) 

Итак ... данные поступают в и данные исчезают, но это не происходит достаточно быстро.

Чем дольше он работает, тем больше данных сидит в этом q. Поскольку я понял, что q.get() будет удалять данные оттуда, и для каждого бита данных там должен быть нерест нити, чтобы удалить его.

Может ли кто-нибудь пролить свет на то, как я заканчиваю все больше и больше данных в этой очереди?

Быстро ли это происходит быстрее, чем в то время как 1: способен зацикливаться и проверять его?

ответ

1

Я считаю, что приемник данных TCP слишком быстр, чем ваш процессор данных. Вы можете добавить счетчик, чтобы подсчитать, сколько данных и сколько данных вышло, чтобы вы знали, постоянно ли очередь растет.

+0

Конечно, для анализа данных требуется больше времени, чем для его получения, но если я просто создаю потоки для каждого бита данных, которые входят, существует ли какое-то ограничение количества потоков, которые я могу вызвать? (Он работает в Windows) нет, join() для потоков, поэтому я просто ожидал, что он будет продолжать нерестовые потоки по мере поступления данных. – PoweredByCoffee

Смежные вопросы