python 爬虫多进程,python单线程实现协程

最近golang写得多,但是采集数据还是习惯性地切换到了python。

业务需求

  1. 采集gif图片和文字(非商业使用)
  2. 图片去除老水印,打上新水印
  3. 生成链接入库

过程

1.采集

刚开始调试、测试使用的单线程,经过2个小时,终于跑通了。觉得数据量不大,跑跑一两个小时也采集完了,实际并没有。超时中断了很多次,又不得不做补偿措施。前后又折腾了俩小时才跑了一小半的数据,没跑下来的都是异常的。脑子木了。

因为要处理水印,忍住没切换到go。

接下来一个小时不到,采用python multiprocessing

爬虫技术栈:

import urllib3 as urllibfrom bs4 import BeautifulSoupimport timefrom urllib.parse import urlencode, urlparseimport osimport multiprocessing

本机:

Mac m1, conda env python3.10

采集效率比对:

单线程 444s - 丢失数据,做补偿措施也只跑了不到2/3

多进程 172s - 100%

def scrawl():    t1 = time.time()    pools = multiprocessing.Pool(8)    missingWords = pools.imap(parsingWord, wordsLeft)    pools.close()    pools.join()    t2 = time.time()    print("耗时:", t2 - t1)

技术细节忽略,

自我总结:容易被问题套住,跳不出思维怪圈

2.图片清洗

接上一篇文章:python pillow-GIF 去除水印并压缩

因为gif处理流程相对复杂一点,准备在单线程基础上增加协程并行处理能力。

记录:

单线程:处理一张gif 耗时26s,优化业务处理流程后16s多。

协程:待补充


发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章