python------线程池的应用

2023-11-08

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

目标:会使用线程池

1:导入

import time

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()
    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我饿了2

3.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("完毕")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python------线程池的应用 的相关文章

随机推荐

  • Windows环境搭建USRP-B210开发环境

    背景 近期在搞软件无线电 SDR 买了一块USRP B210作为发射机 决定在Windows平台下开发 找遍网络 基本上都是Linux下的开发资料 连官网上都没有什么关于Windows下的开发手册 我还就不信了 MATLAB上能跑 还不能在
  • QT中各类型数据转换(更新中)

    QT类型转换 数据转换 16进制 to int型 int型 to 16进制 16进制 to float型 QString型 to 16进制 16进制 to QString型 数据转换 开发过程中通常需要数据类型的转换 最近使用QT开发工具
  • 冒泡排序实现(c++)

    目录 冒泡排序简介 冒泡排序原理 动图演示 代码实现 冒泡排序简介 冒泡排序 最优时间复杂度O N 平均时间复杂度O N 2 最差空间复杂度O N 平均时间复杂度O 1 是一种代码简单的排序也是几乎最慢的算法 稳定 冒泡排序原理 比较相邻的
  • Notepad++ 删除空白行的方法

    方法一 插件处理 先下载安装插件 TextFX 下载后重新启动下 然后在菜单栏找到 TextFX gt TextFX Edit gt Delete blank lines 即可 方法二 正则处理 选择替换 把查找模式设置为正则表达式 在查找
  • windows server 2008 r2安装SQL SERVER 2008 R2 不能打开1433端口设置方法

    服务器 WINDOWS SERVER 2008 R2 SQL SQL SERVER 2008 R2 背景 同一个公司同一个局域网 网络可以ping通 但是不能连接服务器数据库 提示错误1326 前期设置 经过前期设置都不行 telnet l
  • 提升布局灵活性:掌握Vue中vue-splitpane分割面板的实用技巧

    项目中遇到内容分割化并且可以让用户自行调整面板大小的需求 即可使用此组件解决 首先看效果 使用 npm install vue splitpane S 引入组件库 import splitPane from vue splitpane 全局
  • Altium Designer中批量修改原理图中的器件属性

    网上关于批量修改也有很多的介绍 按照网上的尝试在PCB的修改中可以正常操作 但是在原理图中 却只能修改一个 究其原因 原来是差了一步 正确的步骤是 1 先选择需要修改的器件的其中一个 2 右键find similar objects 然后在
  • 史上最全的Unity面试题(含答案)

    一 什么是渲染管道 是指在显示器上为了显示出图像而经过的一系列必要操作 渲染管道中的很多步骤 都要将几何物体从一个坐标系中变换到另一个坐标系中去 主要步骤有 本地坐标 gt 视图坐标 gt 背面裁剪 gt 光照 gt 裁剪 gt 投影 gt
  • scrapy爬取动态网页_基于scrapy的动态网页采集方案总结

    基于scrapy的动态网页采集一直是个难点 而且如果想达到工程级别的抓取 需要有个高效率的解决方案 我列出了几个曾经尝试过的方案和它们的特点 基于PyV8等脚本解析引擎 这类方案的原理是利用开源浏览器项目中的脚本解释引擎 实现相关脚本片段的
  • unity 切换camera 渲染层

    camera有个属性cullingMask 改变cullingMask就可以改变camera渲染层 在做GUI时特别有用 camera cullingMask 1 lt lt 8 渲染除了层8的所有层 camera cullingMask
  • Redis生存时间TTL

    文章目录 为什么要设置key生存时间 设置key的生存时间 访问key的生存时间 清除生存时间 毫秒级时间 为什么要设置key生存时间 设置key的生存时间 可以用于以下使用场景 在登录网站后 将用户session存储在内存 设置一个过期时
  • Second season fifteenth episode,How are Ross and Rachel doing

    Scene Chandler and Joey s apartment Joey and Chandler enter with Chandler covering his eyes and Joey leading him JOEY Al
  • y2第一章 初始mybatis的上机3_MyBatis3.2.x从入门到精通之第一章

    第一章 一 引言 mybatis是一个持久层框架 是apache下的顶级项目 mybatis托管到goolecode下 再后来托管到github下 百度百科有解释 二 概述 mybatis让程序将主要精力放在sql上 通过mybatis提供
  • 改进遗传算法的参数反演--实例复现(详细注释)

    目录 主函数 计算适应度大小 选择操作 论文中的竞争选择法 锦标赛选择法 交叉操作 论文中的离散交叉法 变异操作 论文中的非均匀变异法 生成测试数据 某次运行结果 主函数 清除变量 导入数据 clear clc load Data Crea
  • hihoCoder_1014

    include
  • 以 Animated Drawings APP 为例,用 TorchServe 进行模型调优

    内容导读 上节介绍了 TorchServe 模型部署调优的 5 个步骤 将模型部署到生产环境中 本节以 Animated Drawings APP 为例 实际演示 TorchServe 的模型优化效果 本文首发自微信公众号 PyTorch
  • C++中报错: E0289:没有与参数列表匹配的构造函数“Employee::Employee”实例的解决方案

    仅为学习笔记 大佬请跳过 解决 将构造函数代码中的char pName改为const char pName即可 背景 构造函数等成员函数全部都写了 仍出现这个报错 解决 将构造函数代码中的char pName改为const char pNa
  • 【机器学习期末总结】5-感知机

    分离超平面 随机梯度下降 对偶形式 感知机简介 感知机1957年由Rosenblatt提出 是神经网络与支持向量机的基础 感知机是二类分类的线性分类模型 输入是实例的特征向量 输出是实例的类型 1 1 感知机模型是一个分离超平面 感知机预测
  • Linux crontab命令 定时任务 用法详解以及no crontab for root解决办法

    一 Linux系统安装crontab服务 1 确认crontab是否安装 crontab l 如果报 command not found 就说明该crontab服务没有安装 如果报 no crontab for root 就说明已经安装cr
  • python------线程池的应用

    在python中经常会使用异步 线程池 进程池 解决io操作 在爬虫中并不建议使用进程池 消耗过大 目标 会使用线程池 1 导入 import time def demo1 for i in range 3 print f 我饿了 i ti