python多线程队列数据丢失_python 爬虫 多线程用queue做队列,消费者线程无法从queue中取出数据。...

因为q.join()了 ,而消费者线程没办法 从中取出url 所以被卡死了

运行后只有 ,最开始的时候 ,,消费者线程 从queue中得到了url , 后面就 消费者线程就再 也没有得到url 了 ,麻烦大家帮忙解答下,谢谢。

消费者join一下试试,然后你判断一下条件,如果queue为空的时候,循环break

如果self.Queue为空的话, self.Queue.get() 会抛出 Queue.Empty 异常,这时候线程会退出,这时候都没有工作线程了。

在run()方法的while循环里面增加try…except捕获该异常试试。代码大概如下:

while True:

try:

self.Queue.get(timeout=5) #这里的timeout可以根据情况设置为合适的值

except Queue.Empty:  # 任务队列空的时候结束此线程

break

except:

raise

======================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫多线程队列是非常常见的技术应用。下面是它们在爬虫的应用示例: 1. 多线程:使用多线可以提高爬取数据的效率,同时可以并发处理多个请求。例如,可以将爬虫程序分为多个线程,每个线程负责处理一个请求,这样可以同时发送多个请求并同时处理响应。 2. 队列:使用队列可以实现任务的调度和管理。例如,可以将待爬取的URL放入队列,然后创建多个爬虫线程队列获取URL,并进行相应的爬取操作。这样可以有效地控制任务的执行顺序,避免资源竞争和重复爬取。 综合应用示例: ```python import threading import queue import requests # 创建队列 url_queue = queue.Queue() # 定义爬虫函数 def crawler(): while not url_queue.empty(): url = url_queue.get() # 发送请求并处理响应 response = requests.get(url) # 其他处理操作... # 添加待爬取的URL到队列 url_queue.put('http://example.com/page1') url_queue.put('http://example.com/page2') url_queue.put('http://example.com/page3') # 创建多个爬虫线程 num_threads = 3 threads = [] for _ in range(num_threads): t = threading.Thread(target=crawler) threads.append(t) # 启动线程 for t in threads: t.start() # 等待所有线程执行完毕 for t in threads: t.join() # 所有任务完成 print("All tasks finished.") ``` 这个示例展示了如何使用多线程队列来进行爬虫任务的并发处理和调度。通过将待爬取的URL放入队列,然后创建多个爬虫线程队列获取URL并进行相应的爬取操作,可以实现高效的爬取任务处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值