python------线程池的应用
在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------线程池的应用相关推荐
- Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程
目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...
- Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程
目录 一.Python 线程池前言 二.Python 线程池原理 三.Python 线程池 ThreadPoolExecutor 函数介绍 四.Python 线程池 ThreadPoolExecuto ...
- python线程池原理及使用
python线程池及其原理和使用 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑 ...
- python 线程池 concurrent.futures ThreadPoolExecutor
python 线程池 concurrent.futures ThreadPoolExecutor 步骤: 1,导包from concurrent.futures import ThreadPoolEx ...
- Python线程池与进程池
Python线程池与进程池 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...
- python线程池(threadpool)模块使用笔记详解
这篇文章主要介绍了python线程池(threadpool)模块使用笔记详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 最近在做一个视频设备管理的项目,设备包括(摄像 ...
- python线程池使用和问题记录
记录一次使用多线程的问题 背景 最近工作有个需求根据文件中的数据请求中台服务,然后解析返回值.文件中每行代表一个参数,使用post方式携带参数请求中台接口. 分析:需要处理的数据量非常大(近200w行 ...
- 浅谈python线程池
python线程池的使用 python的多线程管理一直很麻烦,可能是我基础不够好,这里记录并分享以下python的线程池管理 在网上查了一个线程池的使用资料,个人感觉不是很清晰 但是重点很到位, 原文 ...
- python线程池wait_python线程池 ThreadPoolExecutor 的用法示例
前言 从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进 ...
- python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现
概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...
最新文章
- 一步步学习微软InfoPath2010和SP2010--第十四章节--高级选项(3)--重新链接表单
- 华为交换机配置Telnet步骤
- mysql磁盘临时表清理_mysql 创建大量磁盘临时表
- 图像语义分割 -- UNET++
- linux 2.6内核进程调度,linux2.6内核进程调度
- 19【推荐系统4】DeeoCrossing
- 设计模式之一:单例模式SingleTon
- Netty 长连接服务
- 使用ARKit编写测量应用程序代码:交互和测量
- 从项目中由浅入深的学习vue,react,微信小程序和快应用【加薪必备】
- Enterprise Architect Professional Edition
- 实战python网络爬虫豆瓣_三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)...
- 影像分析器之:波形示波器
- python中pytest教程_Pytest安装新手详细教程
- Android 开关控件Switch
- 三线性插值(Trilinear Interpolation)详解
- play home android,playhome
- 【Linux】常用工具的使用
- Android应用程序未安装错误:Installation error: INSTALL_FAILED_UID_CHANGED
- 火山引擎宋慎义:RTC产品需多样化才能良性发展
热门文章
- 求两个数的m和n的最大公约数和最小公倍数。
- 如何处理高版本Kindle无法将图书通过DeDRM转换成Calibre格式的问题
- PTA 天梯赛 L2-014 列车调度
- 无法更新运行时文件夹共享状态_macOS10.15.4亮点在iCloud,要不要更新?来看看更新都有哪些利弊...
- 勤能补拙,拙有何用?
- pyautogui实现狼蛛键盘灯自动切换配置达到自动白天关键盘灯夜晚亮灯
- [IOS APP]老梁故事汇(会)
- 极化SAR分解——Freeman-Durden三分量分解
- Hamachi Error 2503/2502 Solutions on Windows 8/8.1
- smi-s java_SMI-S协议简介