返回顶部
首页 > 资讯 > 后端开发 > Python >python怎么实现多线程并得到返回值
  • 909
分享到

python怎么实现多线程并得到返回值

2023-06-30 12:06:29 909人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇“python怎么实现多线程并得到返回值”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现多线程并得到返

这篇“python怎么实现多线程并得到返回值”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现多线程并得到返回值”文章吧。

    一、带有返回值的多线程

    1.1 实现代码

    # -*- coding:utf-8 -*-"""作者:wyt日期:2022年04月21日"""import threadingimport requestsimport timeurls = [    f'https://www.cnblogs.com/#p{page}' # 待爬地址    for page in range(1, 10)  # 爬取1-10页]def craw(url):    r = requests.get(url)    num = len(r.text)  # 爬取博客园当页的文字数    return num  # 返回当页文字数 def sigle():  # 单线程    res = []    for i in urls:        res.append(craw(i))    return resclass MyThread(threading.Thread):  # 重写threading.Thread类,加入获取返回值的函数    def __init__(self, url):        threading.Thread.__init__(self)        self.url = url                # 初始化传入的url    def run(self):                    # 新加入的函数,该函数目的:        self.result = craw(self.url)  # ①。调craw(arg)函数,并将初试化的url以参数传递——实现爬虫功能                                      # ②。并获取craw(arg)函数的返回值存入本类的定义的值result中    def get_result(self):  #新加入函数,该函数目的:返回run()函数得到的result        return self.resultdef multi_thread():    print("start")    threads = []           # 定义一个线程组    for url in urls:        threads.append(    # 线程组中加入赋值后的MyThread类            MyThread(url)  # 将每一个url传到重写的MyThread类中        )    for thread in threads: # 每个线程组start        thread.start()    for thread in threads: # 每个线程组join        thread.join()    list = []    for thread in threads:        list.append(thread.get_result())  # 每个线程返回结果(result)加入列表中    print("end")    return list  # 返回多线程返回的结果组成的列表if __name__ == '__main__':    start_time = time.time()    result_multi = multi_thread()    print(result_multi)  # 输出返回值-列表    # result_sig = sigle()    # print(result_sig)    end_time = time.time()    print('用时:', end_time - start_time)

    1.2 结果

    单线程:

    python怎么实现多线程并得到返回值

    多线程:

    python怎么实现多线程并得到返回值

    加速效果明显。

    二、实现过程

    2.1 一个普通的爬虫函数

    import threadingimport requestsimport timeurls = [    f'Https://www.cnblogs.com/#p{page}' # 待爬地址    for page in range(1, 10)  # 爬取1-10页]def craw(url):    r = requests.get(url)    num = len(r.text)  # 爬取博客园当页的文字数    print(num)def sigle():  # 单线程    res = []    for i in urls:        res.append(craw(i))    return resdef multi_thread():    print("start")    threads = []           # 定义一个线程组    for url in urls:        threads.append(            threading.Thread(target=craw,args=(url,))  # 注意args=(url,),元组        )    for thread in threads: # 每个线程组start        thread.start()    for thread in threads: # 每个线程组join        thread.join()    print("end")if __name__ == '__main__':    start_time = time.time()    result_multi = multi_thread()    # result_sig = sigle()    # print(result_sig)    end_time = time.time()    print('用时:', end_time - start_time)

    返回:

    start
    69915
    69915
    69915
    69915
    69915
    69915
    69915
    69915
    69915
    end
    用时: 0.316709041595459

    2.2 一个简单的多线程传值实例

    import timefrom threading import Threaddef foo(number):    time.sleep(1)    return numberclass MyThread(Thread):    def __init__(self, number):        Thread.__init__(self)        self.number = number    def run(self):        self.result = foo(self.number)    def get_result(self):        return self.resultif __name__ == '__main__':    thd1 = MyThread(3)    thd2 = MyThread(5)    thd1.start()    thd2.start()    thd1.join()    thd2.join()    print(thd1.get_result())    print(thd2.get_result())

    返回:

    3
    5

    2.3 实现重点

    多线程入口

    threading.Thread(target=craw,args=(url,))  # 注意args=(url,),元组

    多线程传参

    需要重写一下threading.Thread类,加一个接收返回值的函数。 三、代码实战

    使用这种带返回值的多线程技术重写了一下之前发布过的一个爬取子域名的代码,原始代码在这里:https://blog.csdn.net/qq_45859826/article/details/124030119

    import threadingimport requestsfrom bs4 import BeautifulSoupfrom static.plugs.headers import get_ua#https://cn.bing.com/search?q=site%3Abaidu.com&Go=Search&qs=ds&first=20&FORM=PEREdef search_1(url):    Subdomain = []    html = requests.get(url, stream=True, headers=get_ua())    soup = BeautifulSoup(html.content, 'html.parser')    job_bt = soup.findAll('h3')    for i in job_bt:        link = i.a.get('href')        # print(link)        if link not in Subdomain:            Subdomain.append(link)    return Subdomainclass MyThread(threading.Thread):    def __init__(self, url):        threading.Thread.__init__(self)        self.url = url    def run(self):        self.result = search_1(self.url)    def get_result(self):        return self.resultdef Bing_multi_thread(site):    print("start")    threads = []    for i in range(1, 30):        url = "https://cn.bing.com/search?q=site%3A" + site + "&go=Search&qs=ds&first=" + str(            (int(i) - 1) * 10) + "&FORM=PERE"        threads.append(            MyThread(url)        )    for thread in threads:        thread.start()    for thread in threads:        thread.join()    res_list = []    for thread in threads:        res_list.extend(thread.get_result())    res_list = list(set(res_list)) #列表去重    number = 1    for i in res_list:        number += 1    number_list = list(range(1, number + 1))    dict_res = dict(zip(number_list, res_list))    print("end")    return dict_resif __name__ == '__main__':    print(Bing_multi_thread("qq.com"))

    返回:

    {
    1:'https://transmart.qq.com/index',
    2:'https://wpa.qq.com/msgrd?v=3&uin=448388692&site=qq&menu=yes',
    3:'https://en.exmail.qq.com/',
    4:'https://jiazhang.qq.com/wap/com/v1/dist/unbind_login_qq.shtml?source=h6_wx',
    5:'http://imGCache.qq.com/',
    6:'https://new.qq.com/rain/a/20220109A040B600',
    7:'http://cp.music.qq.com/index.html',
    8:'http://s.syzs.qq.com/',
    9:'https://new.qq.com/rain/a/20220321A0CF1X00',
    10:'https://join.qq.com/about.html',
    11:'https://live.qq.com/10016675',
    12:'http://uni.mp.qq.com/',
    13:'https://new.qq.com/omn/TWF20220/TWF2022042400147500.html',
    14:'https://wj.qq.com/?from=exur#!',
    15:'https://wj.qq.com/answer_group.html',
    16:'https://view.inews.qq.com/a/20220330A00HTS00',
    17:'https://browser.qq.com/Mac/en/index.html',
    18:'https://windows.weixin.qq.com/?lang=en_US',
    19:'https://cc.v.qq.com/upload',
    20:'https://xiaowei.weixin.qq.com/skill',
    21:'http://wpa.qq.com/msgrd?v=3&uin=286771835&site=qq&menu=yes',
    22:'http://huifu.qq.com/',
    23:'https://uni.weixiao.qq.com/',
    24:'http://join.qq.com/',
    25:'https://cQtx.qq.com/',
    26:'http://id.qq.com/',
    27:'http://m.qq.com/',
    28:'https://jq.qq.com/?_wv=1027&k=pevCjRtJ',
    29:'https://v.qq.com/x/page/z0678c3ys6i.html',
    30:'https://live.qq.com/10018921',
    31:'https://m.campus.qq.com/manage/manage.html',
    32:'https://101.qq.com/',
    33:'https://new.qq.com/rain/a/20211012A0A3L000',
    34:'https://live.qq.com/10021593',
    35:'https://pc.weixin.qq.com/?t=win_weixin&lang=en',
    36:'https://sports.qq.com/lottery/09fucai/cqssc.htm'
    }

    非常非常非常能感受到速度快了超级多,用这种方式爆破子域名也比较爽。没有多线程,我的项目里可能缺少了好几个功能:因为之前写过的一些程序都因执行时间过长被我砍掉。这个功能还是很实用的。

    以上就是关于“python怎么实现多线程并得到返回值”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网Python频道。

    --结束END--

    本文标题: python怎么实现多线程并得到返回值

    本文链接: https://lsjlt.com/news/328551.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • python怎么实现多线程并得到返回值
      这篇“python怎么实现多线程并得到返回值”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python怎么实现多线程并得到返...
      99+
      2023-06-30
    • python实现多线程并得到返回值的示例代码
      目录一、带有返回值的多线程1.1 实现代码1.2 结果二、实现过程2.1 一个普通的爬虫函数2.2 一个简单的多线程传值实例2.3 实现重点三、代码实战四、学习一、带有返回值的多线程...
      99+
      2024-04-02
    • python多线程怎么获取返回值
      在Python中,可以使用`threading`模块来实现多线程。但是多线程中获取线程返回值稍微复杂一些,因为多线程中的线程是并发执...
      99+
      2023-10-26
      python
    • python多线程返回值如何获取
      在Python中,可以使用`concurrent.futures`模块来实现多线程并获取返回值。具体步骤如下: 导入`concu...
      99+
      2023-10-27
      python
    • python获取多线程及子线程的返回值
      最近有个需求,用多线程比较合适,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 import threading class MyThread(threadin...
      99+
      2022-06-04
      线程 多线程 返回值
    • python函数怎么返回多个返回值
      本篇内容主要讲解“python函数怎么返回多个返回值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python函数怎么返回多个返回值”吧!一般情况下,函数只有一个返回值,但Python也支持函数...
      99+
      2023-06-30
    • 解决python多线程的返回值问题
      前几天看了下python的多线程,但是发现创建的线程得不到函数的返回值,查阅资料发现需要重写Thread类,直接上代码。import threadin...
      99+
      2023-01-31
      多线程 返回值 python
    • Python获取多进程执行的返回值实现
      目录方法-1.方法-2.众所周知,因为GIL的原因,Python至今不支持真正的多线程。为了达到并行运行的目的,我们往往就需要运行多进程了。一个任务由一个进程来运行,可是它的结果怎么...
      99+
      2023-03-06
      Python获取多进程执行的返回值 python多进程获取返回值
    • Java中怎么控制线程返回值
      这篇文章将为大家详细讲解有关Java中怎么控制线程返回值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java线程返回值在使用的时候有很多需要我们不断的学习的东西。下面我们就来看看相关的问题...
      99+
      2023-06-17
    • python怎么从函数返回多个值
      小编给大家分享一下python怎么从函数返回多个值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从函数返回多个值python函数可以返回多个值,而无需任何额外的需...
      99+
      2023-06-27
    • python怎么实现多线程并发抓取
      这篇文章主要为大家展示了“python怎么实现多线程并发抓取”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python怎么实现多线程并发抓取”这篇文章吧。多线程并发抓取单线程太慢的话,就需要多线...
      99+
      2023-06-26
    • python使用threading获取线程函数返回值的实现方法
      threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复、中断。 threading模块提供的类: ...
      99+
      2022-06-04
      线程 函数 返回值
    • python多线程中获取函数返回值的三种方法
      目录方法一:使用队列方法二: 封装 threading.Thread,重写 run 方法方法三:使用进程池方法一:使用队列 import queue import threading...
      99+
      2023-03-01
      python多线程获取函数返回值 python多线程获取返回值
    • 怎么在python中利用return返回多个值
      这篇文章给大家介绍怎么在python中利用return返回多个值,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗...
      99+
      2023-06-14
    • python怎么实现多线程
      这篇文章将为大家详细讲解有关python怎么实现多线程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格...
      99+
      2023-06-14
    • python多线程中获取函数返回值的方法有哪些
      这篇文章主要介绍“python多线程中获取函数返回值的方法有哪些”,在日常操作中,相信很多人在python多线程中获取函数返回值的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python多线程中获...
      99+
      2023-07-05
    • python多元线性回归怎么实现
      在Python中,可以使用`scikit-learn`库来实现多元线性回归。首先,需要导入所需的库和模块:```pythonfrom...
      99+
      2023-08-18
      python
    • python find函数找不到返回值怎么解决
      如果find()函数在字符串中找不到匹配的子字符串,它将返回-1。要解决这个问题,你可以在使用find()函数之前先使用in关键字进...
      99+
      2023-10-18
      python
    • 使用多线程执行任务,并获取返回结果,附异步实现
      1 获取又返回结果的 需要用到 callable接口 public class TestTask implements Callable { @Override public Studen...
      99+
      2023-09-01
      java jvm servlet
    • 怎么在mysql存储过程中返回多个值
      本篇文章为大家展示了怎么在mysql存储过程中返回多个值,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。mysql存储函数只返回一个值。要开发返回多个值的存储过程,需...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作