• day9-Python学习笔记(二十二)多线程,多进程


    多线程,多进程

    多线程:
    咱们打开的程序都一个进程。
    线程是包含在进程里的。
    进程里面最少有一个线程
    线程之间是互相独立的
    主线程

    cpu是几核的,就只能同时运行几个进程

    python的多线程是利用不了多核cpu的,GIL 全局解释器锁的
    如果想利用多核cpu的话,就是用多进程

    I0密集型任务
    使用io比较多的 多线程
    cpu密集型任务
    多进程 能使用多核cpu
    使用cpu比较多的

    多线程.py

    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)

    for t in threads: #等待3个子线程
    t.join() #主线程等待子线程

    end_time = time.time()
    print(end_time-start_time)

    # start_time = time.time()
    # for url in urls:
    # downHtml(url[1],url[0])
    # end_time = time.time()
    # print(end_time-start_time)
    # for i in range(10):
    # t = threading.Thread(target=sayHi,args=('小黑',)) #启动线程
    # t.start()#运行

    多线程2.py
    import threading
    urls = list(range(100))
    # 100个 启动5个线程
    def p(urls):
    for u in urls:
    print(u)

    for i in range(5):
    # urls[:20] 每次取的值
    # urls[20:40]
    # urls[40:60]
    # urls[60:80]
    # urls[80:]
    t = threading.Thread(target=p,args=())
    t.start()

    守护线程.py
    import threading
    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')

    # 进程快
    # 还是线程快
     
    #如果多线程执行的函数 想获取到结果的话,那么就得把它的结果写到一个list里面
    res = []
    import requests
    def lida(x,y):
    res.append(x+y)
    import threading
    for i in range(5):
    t = threading.Thread(target=lida,args=(i,i))
    t.start()
    print(res)

    线程锁
    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)

    #加锁是为了多线程的时候同时修改一个数据的时候 有可能会导致数据不正确

    #python3里面锁 你不加也无所谓,它会自动的给你加上锁

    多进程.py
    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()



  • 相关阅读:
    每日总结6.14
    每日总结6.13
    每日总结6.12
    每日总结6.11
    用户故事与敏捷方法阅读笔记4
    用户故事与敏捷方法阅读笔记3
    团队冲刺第一阶段燃尽图
    团队冲刺10
    智能物联网:将人工智能的力量带入物联网
    MyEclipse修改文件后Building workspace时间过长
  • 原文地址:https://www.cnblogs.com/flynn0825/p/8536995.html
Copyright © 2020-2023  润新知