美文网首页
python创建多线程的方法【初步了解】

python创建多线程的方法【初步了解】

作者: 阿登20 | 来源:发表于2020-11-18 12:59 被阅读0次

一、Python创建多线程的方法

image.png

如上图所示:

  • 准备一个函数

  • import threading

    • t = threading.Thread(target=函数对象,args=(函数参数1,参数2,...)) 创建一个线程对象
  • 启动线程:t.start()

  • 等待结束:t.join()

思路:

循环创建多个线程对象,循环启动线程对象,循环关闭线程。

import threading
import random
# 定义一个函数

def sum_a_b(a,b):
    sum1 = a + b
    print(f"{a} + {b} = {sum1}")

# 创建一个sum_a_b的线程对象

t = threading.Thread(target=sum_a_b, args=(2, 3))
# 启动线程
t.start()

# 关闭线程,释放资料
t.join()

list1 = random.sample(range(1,100,2),10)
list2 = random.sample(range(2,100,2),10)

# 循环创建多个线程对象。存放到一个列表。
list_t = []
for a, b in zip(list1, list2):
    t1 = threading.Thread(target=sum_a_b, args=(a, b))
    list_t.append(t1)

# 循环执行线程

for t1 in list_t:
    t1.start()

# 循环结束线程
for t2 in range(len(list_t)):
    list_t[t2].join()

二、多线爬取博客园首页获取每一页的信息

  1. 博客园首页我们点击下一页会发现url的变化。都是在末尾加一个数字,我们可以将这个数字设置一个变量传进去就可以得到每一页的url. url = https://www.cnblogs.com/#p{}.format(num)
image.png

编写脚本:

import requests
url = "https://www.cnblogs.com/#p2"

def get_cnb(url):
    res = requests.get(url)
    l = len(res.text)
    print(url, l)

get_cnb(url)

# 构造1-29页的url
urls = [f"https://www.cnblogs.com/#p{l}" for l in range(1,30)]

# 构造一个单线程 函数
def  one_cnb():
    print(f"单线程:one_cnb 开始执行")
    for page in urls:
        get_cnb(page)
    print(f"单线程:one_cnb 结束执行")


# 构造一个多线程 函数

def  more_cnb():
    print(f"多线程:more_cnb 开始执行")
    th = [] # 线程对象列表
    for page in urls:
        t = threading.Thread(target=get_cnb,args=(page,))
        th.append(t)
    # 启动多线程
    for i in th:
        i.start()
    # 关闭线程
    for i in th:
        i.join()
    print(f"多线程:more_cnb 结束执行")

if __name__ == '__main__':
    import time
    # 统计耗时
    start = time.time()
    one_cnb()
    end =  time.time()

    print(f"one_cnb 单线程耗时 {end - start}s")

    start = time.time()
    more_cnb()
    end = time.time()

    print(f"more_cnb 多线程耗时 {end - start}s")

args参数是一个元组,当只有一个参数要加逗号 如上面代码(page,)

image.png

总结:

  1. 单线程执行是按照请求的顺序执行的,而多线程是随机的

  2. 多线程的耗时比单线程要少得多

相关文章

  • python创建多线程的方法【初步了解】

    一、Python创建多线程的方法 如上图所示: 准备一个函数 import threadingt = thread...

  • python3创建多线程的几种方法

    python3创建多线程主要有下面两种方法:函数、类 1.函数创建多线程 python3中,提供了一个内置模块th...

  • 2018-08-04(15.5)多线程

    python基础语法(15.5) 多线程 初步了解多线程 (个人理解)电脑的cpu一般情况下一次只能给一个进程提供...

  • Python 多线程笔记

    Python 多线程笔记 创建线程 1. 使用函数创建多线程 2. 使用类创建多线程 继承 Thread 类 重写...

  • 初步了解多线程

    进程,线程,任务进程(Process)是程序运行实例,比如一个正在运行的QQ程序就是一个进程。进程是程序向操作系统...

  • Python初步了解

    语言之间的对比 PHP类:适用于写网页,局限性 受欢迎度下降Python Java: 可以写网页 也可以写后台功...

  • Python多线程编程——多线程编程中的加锁机制

    如果大家对Python中的多线程编程不是很了解,推荐大家阅读之前的两篇文章:Python多线程编程——多线程基础介...

  • 5-线程(补充)

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • 多线程

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • Python多线程编程——创建线程的两个方法

    之前的一篇文章:Python多线程编程——多线程基础介绍,主要介绍了线程的基本知识,以及使用Python创建线程的...

网友评论

      本文标题:python创建多线程的方法【初步了解】

      本文链接:https://www.haomeiwen.com/subject/tltciktx.html