python 3种 多线程方法

Python3 多线程的案例实战之重构线程方法 在工作过程中经常会遇到造批量数据的情况,造数据可以是通过请求接口或者其他写入的方式。结合实际的场景今天把之前的方法做了重构,案例还是结合post接口讲解,自己在实际应用过程中可以自由添加或者改造。 首先,要导入python内置库threading、logging,线程方法和日志方法,为了让执行过程更清晰,我们添加必要的日志显示, import threading,logging 具体实现过程如下,添加过程必要的说明: #控制台的日志信息,信息内容拼接字符串 logging.basicConf 阅读详情

第一种 threading.Thread

import threading
import requests
from bs4 import BeautifulSoup
import re
import time
import queue

course_url = 'xxxxxxxxxxx'

pattern = re.compile(r'<a href="(/zuofa/\d+?)" title="(.*?)" class="shipu">')

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'}


# 创建线程类,继承Thread类
# class MyThread(threading.Thread):
#     def __init__(self, func, args):
#         super(MyThread, self).__init__()
#         self.func = func
#         self.args = args
#
#     def run(self):
#         self.func(*self.args)


def extra_links(q, f):
    """
    用于多线程采集
    :param q: url 队列
    :param f: 写入的目标文件
    :return: 
    """
    while not q.empty():
        try:
            url = q.get()
            r = requests.get(url, headers=headers)
            if r.status_code == 200:
                soup = BeautifulSoup(r.text, 'lxml')
                course_list = soup.find(class_='main-left')
                links = course_list.find_all(class_='item-tt-link')
                for i in links:
                    href = i.attrs['href']
                    f.write('http:{} ---->{}\n'.format(href, i.attrs['title']))
            q.task_done()
        except queue.Empty:
            break


def main():
    with open('course_link.txt', 'w', encoding='utf8') as f:
        q = queue.Queue()
        for i in range(1, 101):
            q.put('{}?page={}'.format(course_url, i))
        threads = []
        for i in range(20):
            t = threading.Thread(target=extra_links, args=(q, f))
            threads.append(t)
        for i in threads:
            i.start()

        for i in threads:
            i.join()


if __name__ == '__main__':
    s = time.clock()
    main()
    print('运行时间: %.2f' % (time.clock() - s))

第二种  concurrent.futures import ThreadPoolExecutor

# @Author: SmallTank
# @Date:   2017-05-08 12:54

import requests
from concurrent.futures import ThreadPoolExecutor
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import time
import re
from bs4 import BeautifulSoup

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


course_url = ['xxxxxxxxxxx?page={}'.format(i) for i in range(1, 101)]

pattern = re.compile(r'<a href="(/zuofa/\d+?)" title="(.*?)" class="shipu">')

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'}


def extra_links(url):
    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        soup = BeautifulSoup(r.text, 'lxml')
        course_list = soup.find(class_='main-left')
        links = course_list.find_all(class_='item-tt-link')
        for i in links:
            href = i.attrs['href']
            f.write('http:{} ---->{}\n'.format(href, i.attrs['title']))


if __name__ == '__main__':
    s = time.clock()
    with open('course_link.txt', 'w', encoding='utf8') as f:
        with ThreadPoolExecutor(max_workers=20) as executor:
            executor.map(extra_links, course_url)
    print('运行用时: %.2f 秒' % (time.clock() - s))


第三种  from multiprocessing.dummy import Pool as ThreadPool

# @Author: SmallTank
# @Date:   2017-05-08 12:54

from multiprocessing.dummy import Pool as ThreadPool
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import time
import re
from bs4 import BeautifulSoup

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


course_url = ['xxxxxxxxxxxx?page={}'.format(i) for i in range(1, 101)]

pattern = re.compile(r'<a href="(/zuofa/\d+?)" title="(.*?)" class="shipu">')

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'}


def extra_links(url):
    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        soup = BeautifulSoup(r.text, 'lxml')
        course_list = soup.find(class_='main-left')
        links = course_list.find_all(class_='item-tt-link')
        for i in links:
            href = i.attrs['href']
            f.write('http:{} ---->{}\n'.format(href, i.attrs['title']))


if __name__ == '__main__':
    s = time.clock()
    with open('course_link.txt', 'w', encoding='utf8') as f:
        pool = ThreadPool(20)
        pool.map(extra_links, course_url)
        pool.close()
        pool.join()
    print('运行用时: %.2f 秒' % (time.clock() - s))

速度可自行测试  后两种相对简单



AD17入门简单教程(一) AD17入门简单教程 我写这篇文章主要是因为最近刚学习完了AD17,想做一下总结,也希望通过自己心得的帮助一些刚入门AD17的小白。 总结一共分为两大部分,包括AD17的下载安装与汉化(文末有详细链接)、工程的创建、元器件库、PCB、走线中的常用命令介绍,文末还附有完整的PCB工程以及讲解视频。 第一部分工程的创建及元器件库常用命令 1.首先在桌面上创建一个文件夹,然后在AD17点击左上角的文件中... 阅读详情

相关推荐

用AT7456E给监控摄像头加OSD?5步搞定时间水印和Logo叠加

本文详细解析了如何使用AT7456E视频字符叠加芯片为监控系统添加专业级OSD功能,涵盖硬件设计、字符库编程和系统集成等关键步骤。通过5步操作实现时间水印和Logo叠加,提升监控系统的可用性和专业性,特别适合安防和工业视觉应用。

sea99的博客 1011

python线程池及其原理和使用

系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。 线程池在系统启动时即创建大量空闲的线程,程序只要将一个函数提交给线程池,线程池就会启动一个空闲的线程来执行它。当该函数执行结束后,该线程并不会死亡,而是再次返回到线程池中变成空闲状态,等待执行下一个函数。 此外,使用线程...

whatday的专栏 7213

UE 顶点动画工具 (VAT)

导入模型需要勾选全精度UV。

iesoxj的博客 1638

Python多线程详解

现代计算机CPU物理核心普遍比较多,我们在编写程序时经常会用到多线程技术来提高程序运行的效率。作为python萌新,我在掌握基本语法后就很想摆弄一下python的多线程,使用起来确实很有python的特点,代码量少、操作方便。之后断断续续写了一些多线程程序,直到今天下午逛论坛,看到很多人说python多线程机制的一些内情,我才意识到自己有多愚蠢哈哈。我把自己学到的内容系统的整理一下,以备后忘,也帮帮后来者。

千山暮彩 5万+

NVIDIA DGX Spark (Ubuntu 24.04) 部署Isaac Sim与Isaac Lab:二进制安装与ROS2集成实战

本文详细介绍了在NVIDIA DGX Spark工作站(Ubuntu 24.04系统)上,通过预编译二进制包稳定部署Isaac Sim与Isaac Lab的完整实战流程。文章重点剖析了二进制安装相较于源码编译和pip安装的优势,有效规避了CUDA、PyTorch等关键组件的版本冲突陷阱,并逐步指导完成环境配置、Isaac Lab集成、Conda环境管理以及ROS2 Jazzy的集成,最终构建出完整的机器人仿真与强化学习开发平台。

kite3的博客 396

Agent 操作系统:未来的 Harness 平台

在大模型技术爆发的当下,自主智能体(Agent)已经成为AI原生应用的核心载体,但当前Agent开发面临着碎片化严重、运维难度高、规模化落地难三大核心痛点,就像1970年代没有通用操作系统的裸机编程时代,开发者需要重复造轮子解决底层基础设施问题。本文将深度解析Agent操作系统(Agent OS)作为AI原生时代的底层基础设施的核心定位,以及下一代Harness平台如何将Agent OS与成熟的DevOps、CI/CD、可观测性、成本管理能力深度融合,成为AI原生应用全生命周期管理的统一平台。

软件工程实践的博客 277

Python学习系列之多线程

一、多线程定义       进程是由若干线程组成的,一个进程至少有一个线程,叫主线程。 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理,不会出现界面卡顿的情况。 用户界面更加友好,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。 程序的运行速度可能加快。 在一些等待的任务实现上如用户输入、...

answer3lin的博客 1万+

【matlab】使用alexnet进行特征提取

1.下载alexnet工具箱 在命令栏输入alexnet,若不报错说明已经安装,若出现错误按照提示去下载工具箱; 下载地址:https://ww2.mathworks.cn/matlabcentral/fileexchange/59133-deep-learning-toolbox-model-for-alexnet-network (1)需要先注册(十分简单),登陆,下载; (2)下载完成之后,...

jingjingliang1995的博客 5843

Python教程:一文掌握Python多线程(很详细)

多线程是指在同一进程内同时运行多个线程,每个线程执行不同的任务,实现并发执行。每个线程都有自己的执行路径,可以独立运行和调度,共享进程的资源。

旦莫的博客 3万+

3D-IC测试挑战与Tessent解决方案解析

3D-IC技术通过硅通孔(TSV)实现芯片垂直堆叠,是延续摩尔定律的关键路径。该技术面临三大核心挑战:KGD标准严苛化要求测试覆盖率达99.5%以上,存储器测试需兼容LPDDR/HBM等多种协议,逻辑堆叠需解决TSV互连的电气特性和时序验证问题。Mentor Tessent平台采用混合测试架构,结合压缩扫描测试(ATPG)和内建自测试(BIST)技术,实现100x测试数据压缩比和99.97%的TSV缺陷检出率。这些创新方案在移动SoC和高性能计算芯片中已获验证,测试时间缩短73%,缺陷逃逸率降低77%。随着

weixin_30621711的博客 376

【GAN】pytorch-CycleGAN-and-pix2pix开源项目训练自定义数据集

Github:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 一、概念简介 图像转换:将一张图片转换为不同风格的图片,如将一张灰度图变成彩色图,素描图换成实物图。 pix2pix:需要成对的数据集,两个不同域的图像一一对应。 CycleGAN:不需要成对的数据集,只用两个不同域(domain)的图像集合X和Y,两个集合中的图像不是一一对应的。 二、训练pix2pix模型 2.1 combine_A_and_B datasets/combin

See_Star的博客 4755

python3创建多线程的几种方法

python3创建多线程主要有下面两种方法:函数、类 1.函数创建多线程 python3中,提供了一个内置模块threading.Thread,可以很方便的创建多线程,threading.Thread()一般接收2个参数: 线程函数名:要放置线程让其后台执行的函数,有用户自己定义,主要不要加() 线程函数的参数: 线程函数名所需的参数,以tuple形式传入,如果不需要参数,可以不指定。 #!/...

CurryCoder的个人博客 2056

R语言基于机器学习三分类结果、计算三分类混淆矩阵、计算每一个类别对应的特异度(specificity)、灵敏度(sensitivity)、PPV、NPV

R语言基于机器学习三分类结果、计算三分类混淆矩阵、计算每一个类别对应的特异度(specificity)、灵敏度(sensitivity)、PPV、NPV

data+scenario+science+insight 643

python创建多线程_python3创建多线程的几种方法

技术交流QQ群:1027579432,欢迎你的加入!python3创建多线程主要有下面两种方法:函数、类1.函数创建多线程python3中,提供了一个内置模块threading.Thread,可以很方便的创建多线程,threading.Thread()一般接收2个参数:线程函数名:要放置线程让其后台执行的函数,有用户自己定义,主要不要加()线程函数的参数: 线程函数名所需的参数,以tuple形式传...

weixin_39957265的博客 271

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python多线程实现方法_Python3 多线程的两种实现方式

最近学习 Python3 ,希望能掌握多线程的使用,在此做个笔记。同时也希望Python 牛人指点错误。关于线程的概念,前面简单总结了一下 java 的多线程,传送门:java 多线程概念,三种创建多线程的方法。这里记两种多线程的实现方式方法。Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。...

weixin_39997300的博客 168

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python多线程方法_python 3种 多线程方法

第一种 threading.Threadimport threadingimport requestsfrom bs4 import BeautifulSoupimport reimport timeimport queuecourse_url = 'xxxxxxxxxxx'pattern = re.compile(r'')headers = {'User-Agent': 'Mozilla/5.0...

weixin_29706315的博客 359

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python3多线程--多线程的2种启动方法

1、什么是多线程,为什么要使用多线程 多线程就是多个线程并行运行,例如播放音乐和计时两个线程同时运行。当然了,这是一种宏观并行,微观串行,CPU实际上是在两个线程上来回切换的。但是用于计算机的运行速度很快,我们用户是觉察不出来的。 2、Python多线程 Python是支持多线程的,主要是通过thread和threading这两个模块来实现的。一般来说,使用线程有两种模式,一种是创建线程要执

gaitiangai的专栏 7477

python3多线程共享变量_python多线程共享变量的使用和效率方法

python多线程可以使任务得到并发执行,但是有时候在执行多次任务的时候,变量出现“意外”。import threading,timen=0start=time.time()def b1(num):global nn=n+numn=n-numdef b2(num):for i in range(1000000):b1(num)t1=threading.Thread(target=b2,args=(...

weixin_39859061的博客 424

python2创建3个线程_python创建多线程的两种方法

当我们使用python编程的过程中需要多个输出的任务的话,为了能提高效率,可以使用多线程并行处理,那你知道如果穿件多线程使用吗?本文演示python创建多线程的两种方法:1、继承Thread类,并重写它的run()方法;2、用函数创建多线程。方法一:继承Thread类,并重写它的run()方法importtimefromthreadingimportThreadclassMyThread...

weixin_42510148的博客 557

python3线程锁方法_python 多线程、线程锁、事件

python 多线程、线程锁、事件

weixin_39699670的博客 195

简单聊一聊python3中多线程的使用方法

threading库 threading库是python3内置的线程库,可以使用threading库创建多个线程 创建多线程的两种方法 继承Thread类(推荐使用) 直接看代码,注意看注释讲解 import re, requests, threading class MyThread(threading.Thread): """ 定义一个线程 用于获取一个页面的文章内容...

静、的博客 1688

python3线程锁方法_python3.4多线程实现同步的四种方式

python3.4多线程实现同步的四种方式

weixin_39959482的博客 199

python3 多线程 threading.local 代理_Python中threading.local方法

#coding=utf-8import threading# 创建全局ThreadLocal对象:localVal = threading.local()localVal.val = "Main-Thread"def process_student():print '%s (in %s)' % (localVal.val, threading.current_thread().name)def p...

weixin_39609407的博客 215

python3 结束线程_Python3使用线程

Python2标准库中提供了两个模块thread和threading支持多线程。thread有一些缺陷在Python3中弃用,为了兼容性,python3 将 thread 重命名为 "_thread",在Python3中推荐直接使用threading。创建线程对象class threading.Thread(group=None, target=None, name=None, args=(), ...

weixin_39921504的博客 958

python3 多线程 threading.local 代理_Python基于ThreadingTCPServer创建多线程代理的方法示例...

本文实例讲述了Python基于ThreadingTCPServer创建多线程代理的方法。分享给大家供大家参考,具体如下:#coding=utf8from BaseHTTPServer import BaseHTTPRequestHandlerfrom SocketServer import ThreadingTCPServerimport gzipfrom StringIO import Stri...

weixin_39549899的博客 65
上一篇: python os.system os.popen 模块 调用命令行
下一篇: SQLAlchemy 几种查询方式总结
SmallTankPy
博客等级 码龄10年 26粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值