У меня есть код, который создает некоторых рабочих:
def create_workers():
for _ in range(50):
t = threading.Thread(target=work)
t.daemon = True
t.start()
и Queue
(это сканер) work
, который иногда зависает.
def work():
while True:
url = queue.get()
ScrapperSpider.crawl_page(threading.current_thread().name, url)
queue.task_done()
Есть два другие функции:
def create_jobs():
queue.join()
def crawl():
create_jobs()
и основной:
create_workers()
while True :
if len(ScrapperSpider.queue)> 0:
create_jobs()
else :
queue.put(somthing)
ScrapperSpider.queue.add(somthin)
crawl()
Проблема с queue.join()
. Он вешает все нити и ждет их освобождения. Есть ли способ освободить эту тему?