У меня есть сервер, берущий данные 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: способен зацикливаться и проверять его?
Конечно, для анализа данных требуется больше времени, чем для его получения, но если я просто создаю потоки для каждого бита данных, которые входят, существует ли какое-то ограничение количества потоков, которые я могу вызвать? (Он работает в Windows) нет, join() для потоков, поэтому я просто ожидал, что он будет продолжать нерестовые потоки по мере поступления данных. – PoweredByCoffee