【发布时间】:2017-08-15 23:39:00
【问题描述】:
我有两个用于不同任务的队列,第一次抓取将开始抓取列表中的链接,然后它会生成更多链接以抓取到队列一,并且还会生成到队列二上不同任务的新链接,我的程序正在运行,但问题是:当队列二的工作人员开始运行时,它会阻止队列一的工作人员,他们基本上没有并行运行,他们正在等待对方完成他们的任务。我怎样才能让它们并行运行?
import threading
from queue import Queue
queue = Queue()
queue_two = Queue()
links = ['www.example.com', 'www.example.com', 'www.example.com',
'www.example.com', 'www.example.com', 'www.example.com',
'www.example.com', 'www.example.com', 'www.example.com']
new_links = []
def create_workers():
for _ in range(4):
t = threading.Thread(target=work)
t.daemon = True
t.start()
for _ in range(2):
t = threading.Thread(target=work_two)
t.daemon = True
t.start()
def work():
while True:
work = queue.get()
#do something
queue.task_done()
def work_two():
while True:
work = queue_two.get()
#do something
queue_two.task_done()
def create_jobs():
for link in links:
queue.put(link)
queue.join()
crawl_two()
crawl()
def create_jobs_two():
for link in new_links:
queue_two.put(link)
queue_two.join()
crawl_two()
def crawl():
queued_links = links
if len(queued_links) > 0:
create_jobs()
def crawl_two():
queued_links = new_links
if len(queued_links) > 0:
create_jobs_two()
create_workers()
crawl()
【问题讨论】:
标签: python multithreading queue