zoukankan      html  css  js  c++  java
  • python多线程多进程

    # 多线程:
    # 咱们打开的程序都一个进程。
    # 线程是包含在进程里的。
    # 进程里面最少有一个线程
    # 线程之间是互相独立的
    # 主线程
    #
    # cpu是几核的,就只能同时运行几个进程
    #
    # python的多线程是利用不了多核cpu的,GIL 全局解释器锁的
    # 如果想利用多核cpu的话,就是用多进程
    #
    # I0密集型任务
    # 使用io比较多的 多线程
    # cpu密集型任务
    # 多进程 能使用多核cpu
    # 使用cpu比较多的

    import threading
    import time
    import requests

    def downHtml(url,name):
    conent = requests.get(url).content
    f = open(name+'.html','wb')
    f.write(conent)
    f.close()
    urls = [
    ['nnzhp','http://www.nnzhp.cn'],
    ['dsx','http://www.imdsx.cn'],
    ['besttest','http://www.besttest.cn']
    ]
    start_time = time.time()
    threads = [] #存放刚才启动线程
    for url in urls:
    t = threading.Thread(target=downHtml,args=(url[1],url[0]))
    t.start()
    threads.append(t)
    # 线程等待,多线程在运行的时候,每个线程都是独立运行的,不受其他的线程干扰,如果想在哪个线程运行完之后,再做其他操作的话,就得等待它完成,那怎么等待呢,使用join,等待线程结束
    for t in threads: #等待3个子线程
    t.join() #主线程等待子线程
    end_time = time.time()
    print(end_time-start_time)

    #多进程,上面说了Python里面的多线程,是不能利用多核CPU的,如果想利用多核CPU的话,就得使用多进程,python中多进程使用multiprocessing模块。
    import multiprocessing,threading
    import time
    def run2():
    print('这是多线程启动的')
    def run():
    time.sleep(2)
    for i in range(5):
    t = threading.Thread(target=run2)
    t.start()
    if __name__ == '__main__':
    for i in range(5):
    p = multiprocessing.Process(target=run)
    p.start()

    #线程锁,线程锁就是,很多线程一起在操作一个数据的时候,可能会有问题,就要把这个数据加个锁,同一时间只能有一个线程操作这个数据
    #加锁是为了多线程的时候同时修改一个数据的时候 有可能会导致数据不正确
    #python3里面锁 你不加也无所谓,它会自动的给你加上锁

    import threading
    from threading import Lock
    num = 0
    lock = Lock() # 申请一把锁
    def run():
    global num
    lock.acquire() # 加锁
    num += 1
    lock.release() # 解锁
    lis = []
    for i in range(5):
    t = threading.Thread(target=run)
    t.start()
    lis.append(t)
    for t in lis:
    t.join()
    print('over', num)

    #守护线程,什么是守护线程呢,就相当于你是一个国王(非守护线程),然后你有很多仆人(守护线程),这些仆人都是为你服务的,一但你死了,那么你的仆人都给你陪葬。
    import time
    def pz():
    time.sleep(2)
    print('我是秦始皇的陪葬')
    threads = []
    for i in range(10):
    t = threading.Thread(target=pz)
    t.setDaemon(True)#设置子线程为守护线程
    # 守护线程就是,一旦主线程执行结束,那么子线程立刻结束,不管子线程有没有运行完
    t.start()
    threads.append(t)
    for t in threads:
    t.join() #如果主线程等待子线程的话,那么设置的守护线程就不好使了
    print('done')



  • 相关阅读:
    UBI FAQ and HOWTO
    Is an MTD device a block device or a char device?
    使用apt-mirror建立本地debian仓库源
    在SpringMVC中获取request对象的几种方式
    spring mvc提交日期类型参数
    Java 获取指定日期的方法汇总
    CentOS 7 安装tomcat
    CentOS 7 安装和配置JDK
    CentOS7 yum 安装git
    Java List合并去重
  • 原文地址:https://www.cnblogs.com/zhufb/p/8532778.html
Copyright © 2011-2022 走看看