наличие двух или более рабочих очередей в python

1

Итак, у меня есть два основных рабочих процесса, один из которых должен отображать содержимое URL-адреса, а другой вставляет каждую из привязных ссылок в таблицу postgre. Теперь я бегу 12 экземпляров первого процесса, все из которых берут URL из одной очереди URL-адресов, а затем помещают якоря во вторую очередь, но как у меня есть другой набор потоков, пытающихся подтолкнуть Anchors в таблицу? когда я запускаю потоки, нахожу свою очередь пустой и они умирают, если я отключу эту функцию, которую они не умрут, когда работа будет выполнена, как мне это сделать, и, кстати, лучше использовать процесс вместо потока из-за предположительно интенсивное взаимодействие ввода-вывода?

Теги:
multithreading
multiprocessing

1 ответ

1
Лучший ответ

вам понадобятся две очереди: URLFetchers будет портировать URL-адреса из одной очереди и нажимать на вторую, затем AnchorInserters должен появиться из этой второй очереди для обработки данных. Эта организация должна предоставить вам хороший механизм синхронизации для вашей проблемы.

Изменить: во избежание выхода из работы

Вам нужно заблокировать до одного элемента.

while True:
   element = queue.get(block=True, timeout=None)
   #do worker task

Из python queue.get doc...

Если дополнительный блок args является истинным и timeout - None (по умолчанию), блок если необходимо, до доступны.

  • 0
    по умолчанию мой рабочий поток выполняет sys.exit (0), если очередь пуста, и в начале вторая очередь пуста, и когда я отключаю ее, она ждет бесконечное ожидание даже после завершения работы.
  • 1
    @max, см. новую редакцию вопроса, думаю, я понял, в чем твоя проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню