远离笨比术 2023-09-16 12:26 采纳率: 70%
浏览 7
已结题

python多线程中途跳出问题

在写多线程的时候遇到的问题,写了两个线程,一个线程是从固定网址等待响应内容,另外一个是解析网站响应内容。其中解析网站内容的线程存在一个前提条件,必须队列中存在响应内容才能解析,如果加入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)

  • 写回答

3条回答 默认 最新

  • 周立很惨 2023-09-16 12:38
    关注

    循环没跳出来,加个值判断是否结束

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月1日
  • 修改了问题 9月16日
  • 创建了问题 9月16日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表