Я проектирование немного мягкий, которая включает в себя:Heavy I/O и питон многопроцессорная/многопоточного
Получение ресурса в Интернете,
Некоторое взаимодействие с пользователем (быстрое редактирование ресурса) ,
Некоторая обработка.
Я хотел бы сделать это со многими ресурсами (все они перечислены в списке). Каждый из них независим от других. Поскольку часть редактирования довольно утомительна, я хотел бы облегчить жизнь пользователю (возможно, мне), так что ему не нужно ждать загрузки каждого ресурса. Для простоты мы забываем третью задачу здесь.
Моя идея заключалась в использовании модуля многопоточной обработки или многопроцессорности. Некоторые потоки (скажем, поток 1) будут выполнять «загрузку» заранее, а другую (скажем, поток 2), которые будут взаимодействовать с пользователем на уже загруженном ресурсе.
Вопрос: Как я могу убедиться, что нить 1 всегда впереди, по крайней мере, ресурсов forward_min и в лучшем случае forward_max (forward_max> ahead_min) всегда?
Мне обычно нужно что-то похожее на Queue.Queue (forward_max) (или multiprocessing.Queue (forward_max)), за исключением того, что при достижении опции forward_max вставка блокируется до тех пор, пока в очереди не останется не больше элементов before_min (на самом деле он блокируется до тех пор, пока очередь не будет пустой, см. http://docs.python.org/library/queue.html#module-Queue). Popping также должен быть заблокирован до тех пор, пока в очереди не останется впереди ~min + 1 элементов (в конце последовательности ресурсов я смогу затем вставить некоторые фиктивные объекты, чтобы гарантировать, что даже последний обработанный ресурс).
Любая идея? Если вы думаете о какой-либо более простой альтернативе, пожалуйста, поделитесь!
В python 3, пожалуйста, для упрощения поддержки Unicode – brained
В чем преимущество make_min больше нуля? –
Чтобы быть уверенным, что пользователь никогда не ждет. forward_min не должно быть большим, 2 (или, может быть, даже 1) должно быть достаточно и дать мне душевное спокойствие. – brained