• Python之多线程多进程


    (一)进程

    1、定义

    进程:就是一组资源的集合。一个程序就是一个进程。

    • 线程是用来干活的,只有进程的话是没办法运行的,进程里其实是线程在具体干活的。
    import threading
    import time
    def run():
        time.sleep(5)
        print('over')
    
    start_time=time.time()
    
    run()
    run()
    run()
    run()
    
    end_time=time.time()
    print('run_time', end_time-start_time)
    #结果:run_time=20.38954234234

    上面这个例子是单线程执行的,如果使用多线程,则会并行执行,执行结果应该是5s左右。

    import threading
    import time
    def run():
        time.sleep(5)
        print('over')
    
    start_time=time.time()
    for i in range(5):
        t=threading.Thread(target=run)  #实例化一个线程
        t.start() #启动这个线程
    end_time=time.time()
    print('run_time=', end_time-start_time)

    单线程下载网页

    def download_html(url,file_name):
        res=requests.get(url)
        with open(file_name, 'wb') as fw:
            fw.write(res.content)  #由于网页的字符集编码不一致,所以使用wb模式,避免写到文件里时是乱码
    
    urls={
       'nnzhp':'http://ww.nnzhp.cn',
       'cc':'http://www.cc-na.cn',
       'dsx':'http://www.imdsx.cn'    
    }
    
    start_time=time.time()
    for k,v in urls.items():
            download_html(url=v,file_name=k)
    end_time=time.time()
    print('run_time=',end_time-start_time)

    多线程下载网页

    import requests
    import threading
    def download_html(url,file_name):
        res=requests.get(url)
        with open(file_name+'.html', 'wb') as fw:
            fw.write(res.content)
        print('【%s】下载完成' %file_name)
    
    urls={
        'nnzhp':'http://www.nnzhp.cn',
        'cc':'http://www.cc-na.cn',
        'dsx':'http://www.imdsx.cn'
    }
    
    for file_name,url in urls.items():
      t=threading.Thread(target=download_html,args=(url,file_name))   #args是存参数的,如果里面只有一个参数的话,一定要在这个参数后面加一个逗号,因为是保存在元组里,如果不加逗号,它会默认为是字符串   应该写成:args=(url,)
      t.start()
    • 一个进程里面至少有一个线程,这个线程就是主线程。
    • 主线程只是调度用的,它把子线程招来之后就完事了,因此如果要统计运行时间,必须要让主线程等待所有的子线程都执行完后再记录结束时间。
  • 相关阅读:
    机器学习十四--深度学习-卷积
    机器学习十三——垃圾邮件分类2
    机器学习十二----朴素贝叶斯-垃圾邮件分类
    机器学习十一 ——分类与监督学习,朴素贝叶斯分类算法
    机器学习九----主成分分析
    机器学习八——特征选择
    基于D3.js 绘制一个折柱混合图
    一个轮播图
    贪吃蛇
    数组中哪些方法是响应式的
  • 原文地址:https://www.cnblogs.com/yanwuliu/p/10181729.html
Copyright © 2020-2023  润新知