2016-08-14 2 views
0

В моем коде есть цикл, который проверяет список, а если есть элементы в списке, он обрабатывает их и удаляет из списка. Элементы непрерывно вставляются в список другим потоком.Обработка списка с использованием потоковой обработки

Вот код:

while True: 
    for item in list: 
     Process(item) 
     Remove(item) 

Задача 1:

Что я выше работ, но проблема в том, что она очень интенсивно на процессоре.
Я могу поместить что-то вроде «time.sleep» в код, но эта программа должна немедленно обрабатывать элементы в списке без каких-либо задержек. Как сделать его менее интенсивным на процессоре (помните, что я одновременно запускаю другой поток).

Задача 2:

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

+0

Я не понимаю, можете ли вы описать проблему? – martriay

+0

вы можете использовать функцию таймаута, если я понимаю, что вы имеете в виду. –

+0

я только что поставил проблему –

ответ

1

Похоже, что модуль queue будет вам полезен. Он реализует многопроцессорные очереди с несколькими потребителями и позволяет синхронизировать между потоками без ожидание.

см. Также Solution to producer and consumer problem in python который использует этот модуль queue.

+0

как насчет threading.Event? –

+1

Очевидно, вы можете синхронизировать между потоками самостоятельно (под капотом классы 'queue' синхронизируются между потоками с классами синхронизации threading) – napuzba

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