在写多线程的时候遇到的问题,写了两个线程,一个线程是从固定网址等待响应内容,另外一个是解析网站响应内容。其中解析网站内容的线程存在一个前提条件,必须队列中存在响应内容才能解析,如果加入while in_q.empty() is not True,只要过程中存在空情况,整个循环解析就进行不下去。
等于说现在我只需要最后爬完所有网址判定从而进行一个循环退出,但中间队列空的时候不能退出。之前是因为想解决一开始判断队列为空值就直接跳出这个问题加了一个参数t,但运行中间也会存在这个问题,感觉需要一直监视队列不能为空。
想问一下怎么解决
from queue import Queue
from threading import Thread
import time
import requests
from bs4 import BeautifulSoup
def consumer(in_q):
t = 1
while True:
t+=1
print(t)
if in_q.empty() == True and t > 2:
print("空")
break
content = str(in_q.get().content, encoding='utf-8', errors='ignore')
soup = BeautifulSoup(content, 'html.parser')
nums = soup.find_all('h2', 'm-b-sm')
for num in nums:
print(num.text)
in_q.task_done()
def producer(out_q):
for i in range(1,11):
url = rf"https://ssr4.scrape.center/page/{i}"
print("#"*10,url)
data = requests.get(url=url)
out_q.put(data)
if __name__ == '__main__':
start = time.time()
q = Queue()
# result_q = Queue()
t1 = Thread(target=producer,args=(q,))
t2 = Thread(target=consumer, args=(q,))
t1.start()
t2.start()
q.join()
end = time.time()
print("time:", end - start)