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------线程池的应用 的相关文章

  • 类的 IPython 表示

    我正在使用我创建的模块尝试 IPython 但它没有显示类对象的实际表示 相反 它显示类似的内容 TheClass module TheClass name I heavily在这个模块中使用元类 我有真正有意义的类表示 应该向用户显示 是
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 如何使用 Selenium 和 ChromeDriver 解决 TypeError: 'module' object is not callable 错误 [重复]

    这个问题在这里已经有答案了 代码试验 from selenium import webdriver from selenium webdriver chrome options import Options as Chromeoptions
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • 如何将 GAE 中一种 Kind 中的所有实体复制到另一种 Kind 中,而无需显式调用每个属性

    我们如何使用function clone entity 如中所述在 Python 中复制 Google App Engine 数据存储中的实体 而无需在 编译 时知道属性名称 https stackoverflow com question
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 如何使用 Boto3 启动具有 IAM 角色的 EC2 实例?

    我无法弄清楚如何使用指定的 IAM 角色在 Boto3 中启动 EC2 实例 以下是迄今为止我如何成功创建实例的一些示例代码 import boto3 ec2 boto3 resource ec2 region name us west 2
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是

随机推荐

  • 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