在python中经常会使用异步,线程池,进程池,解决io操作,在爬虫中并不建议使用进程池(消耗过大)

目标:会使用线程池

1:导入

import timedef demo1():for i in range(3):print(f"我饿了{i}")time.sleep(1)def demo2():for i in range(3):print(f"开饭了{i}")time.sleep(1)if __name__ == "__main__":start=time.time()demo1()demo2()end=time.time()print(end-start)#结果为
我饿了0
我饿了1
我饿了2
开饭了0
开饭了1
开饭了2
6.034951686859131

我们可以看到了只有在demo1完全运行完毕才会运行demo2,这个时候是单任务

2:基本使用方法

#1:导入threading模块
import threading
#2:使用threading模块中的Thread创建一个对象
t1=threading.Thread(target=xx)#xx为函数的名字
#3:调用这个实例对象的start方法让这个线程开始运行
t1.start()
import time
import threading
def demo1():for i in range(3):print(f"我饿了{i}")time.sleep(1)def demo2():for i in range(3):print(f"开饭了{i}")time.sleep(1)if __name__ == "__main__":start=time.time()t1=threading.Thread(target=demo1)t2 = threading.Thread(target=demo2)t1.start()t2.start()demo2()end=time.time()print(end-start)#结果为:
我饿了0
开饭了0开饭了0开饭了1开饭了1
我饿了1开饭了2
开饭了2我饿了23.0304412841796875

我们可以看到这时候2个线程的一起跑

3:线程池的基本使用步骤

#1:导入包
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
#ThreadPoolExecutor线程池ProcessPoolExecutor进程池
def asd(data):print(data)
#2:在线程池中创建几个线程
pool=ThreadPoolExecutor(10)#创建10个线程
#3:在线程池中发任务
for i in range(100):pool.submit(asd,i)
#4:等待线程池把任务都执行完毕
pool.shutdown()
print("完毕")

4:在实际爬虫中的简单应用

爬取网站的所以图片

from concurrent.futures import ThreadPoolExecutor
import requests
import os
def tupian(page):data = {'per_page': '12','page': page,'seo_tags': 'true'}..........
#这个函数是获取每张图片的id
def downlong(id):#这个函数是下载图片
def run():pool=ThreadPoolExecutor(13)a = int(input("请输入爬取的页数(大与3):"))for page in range(3, a + 1):id_list = tupian(page)for id in id_list:pool.submit(downlong,id)pool.shutdown()print("完毕")#主要看怎么使用,函数就不给大家了

爬取菜价

import csv
from  concurrent.futures import ThreadPoolExecutor
import requests
with open('北京新发地菜价.csv',mode='w', encoding='utf-8',newline='.0') as f:wirter = csv.writer(f)#创建一个写入的对象wirter.writerow(['菜名', '最低价(元)', '最高价(元)', '平均价(元)', '产地','发布日期'])def get_one_page(pageNo):data={"limit":20,"current":pageNo#...........if __name__ == '__main__':# get_one_page(1)with ThreadPoolExecutor(100) as t:#创建10000个线程for i in range(1,22):#所有页数t.submit(get_one_page,pageNo=i)#接任务t.shutdown()print('over!')

刷播放

import ctypes
import execjs
import time
from urllib.parse import urlparse, parse_qs
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import binascii
import requests
import datetime
from concurrent.futures import ThreadPoolExecutor
asd = execjs.compile("""function ab () {var e= (new Date).getTime().toString(36)var t= Math.random().toString(36).replace(/^0./, "");return "" .concat(e, "_").concat(t)  //concat:相当于连接
}
""")def aes_encrypt(data):def creat_qn(data_str):def creat_ckey(vid, rnd, guid, appVer, padtform):def playvinfo_seconed(vid, rnd, appVer, padtform, flowid, guid, ckey):def play_first(video_url, vid, pid, guid, fn, vkey, padtform, rnd, appver):def run(video_url):if __name__ == "__main__":pool=ThreadPoolExecutor(10)#在线程池中创建10个线程video_url = "https://w.yangshipin.cn/video?type=0&vid=u000058lp0z&ptag=yangshipincp"for i in range(1,10):pool.submit(run,video_url)print(f"增加{i}个播放量")# 等待线程池把任务都执行完毕pool.shutdown()print("完毕")

python------线程池的应用相关推荐

  1. Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...

  2. Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池原理 三.Python 线程池 ThreadPoolExecutor 函数介绍 四.Python 线程池 ThreadPoolExecuto ...

  3. python线程池原理及使用

    python线程池及其原理和使用 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑 ...

  4. python 线程池 concurrent.futures ThreadPoolExecutor

    python 线程池 concurrent.futures ThreadPoolExecutor 步骤: 1,导包from concurrent.futures import ThreadPoolEx ...

  5. Python线程池与进程池

    Python线程池与进程池 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...

  6. python线程池(threadpool)模块使用笔记详解

    这篇文章主要介绍了python线程池(threadpool)模块使用笔记详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 最近在做一个视频设备管理的项目,设备包括(摄像 ...

  7. python线程池使用和问题记录

    记录一次使用多线程的问题 背景 最近工作有个需求根据文件中的数据请求中台服务,然后解析返回值.文件中每行代表一个参数,使用post方式携带参数请求中台接口. 分析:需要处理的数据量非常大(近200w行 ...

  8. 浅谈python线程池

    python线程池的使用 python的多线程管理一直很麻烦,可能是我基础不够好,这里记录并分享以下python的线程池管理 在网上查了一个线程池的使用资料,个人感觉不是很清晰 但是重点很到位, 原文 ...

  9. python线程池wait_python线程池 ThreadPoolExecutor 的用法示例

    前言 从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进 ...

  10. python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现

    概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...

最新文章

  1. 一步步学习微软InfoPath2010和SP2010--第十四章节--高级选项(3)--重新链接表单
  2. 华为交换机配置Telnet步骤
  3. mysql磁盘临时表清理_mysql 创建大量磁盘临时表
  4. 图像语义分割 -- UNET++
  5. linux 2.6内核进程调度,linux2.6内核进程调度
  6. 19【推荐系统4】DeeoCrossing
  7. 设计模式之一:单例模式SingleTon
  8. Netty 长连接服务
  9. 使用ARKit编写测量应用程序代码:交互和测量
  10. 从项目中由浅入深的学习vue,react,微信小程序和快应用【加薪必备】
  11. Enterprise Architect Professional Edition
  12. 实战python网络爬虫豆瓣_三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)...
  13. 影像分析器之:波形示波器
  14. python中pytest教程_Pytest安装新手详细教程
  15. Android 开关控件Switch
  16. 三线性插值(Trilinear Interpolation)详解
  17. play home android,playhome
  18. 【Linux】常用工具的使用
  19. Android应用程序未安装错误:Installation error: INSTALL_FAILED_UID_CHANGED
  20. 火山引擎宋慎义:RTC产品需多样化才能良性发展

热门文章

  1. 求两个数的m和n的最大公约数和最小公倍数。
  2. 如何处理高版本Kindle无法将图书通过DeDRM转换成Calibre格式的问题
  3. PTA 天梯赛 L2-014 列车调度
  4. 无法更新运行时文件夹共享状态_macOS10.15.4亮点在iCloud,要不要更新?来看看更新都有哪些利弊...
  5. 勤能补拙,拙有何用?
  6. pyautogui实现狼蛛键盘灯自动切换配置达到自动白天关键盘灯夜晚亮灯
  7. [IOS APP]老梁故事汇(会)
  8. 极化SAR分解——Freeman-Durden三分量分解
  9. Hamachi Error 2503/2502 Solutions on Windows 8/8.1
  10. smi-s java_SMI-S协议简介