Итак, у меня есть два основных рабочих процесса, один из которых должен отображать содержимое URL-адреса, а другой вставляет каждую из привязных ссылок в таблицу postgre. Теперь я бегу 12 экземпляров первого процесса, все из которых берут URL из одной очереди URL-адресов, а затем помещают якоря во вторую очередь, но как у меня есть другой набор потоков, пытающихся подтолкнуть Anchors в таблицу? когда я запускаю потоки, нахожу свою очередь пустой и они умирают, если я отключу эту функцию, которую они не умрут, когда работа будет выполнена, как мне это сделать, и, кстати, лучше использовать процесс вместо потока из-за предположительно интенсивное взаимодействие ввода-вывода?
вам понадобятся две очереди: URLFetchers
будет портировать URL-адреса из одной очереди и нажимать на вторую, затем AnchorInserters
должен появиться из этой второй очереди для обработки данных. Эта организация должна предоставить вам хороший механизм синхронизации для вашей проблемы.
Изменить: во избежание выхода из работы
Вам нужно заблокировать до одного элемента.
while True:
element = queue.get(block=True, timeout=None)
#do worker task
Из python queue.get
doc...
Если дополнительный блок args является истинным и timeout - None (по умолчанию), блок если необходимо, до доступны.