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

    一.多线程

    1.进程是多个资源的集合。
    2.线程是就是进程里面具体干活的。
    3.线程和线程之间是互相独立的。
    4.如果多线程运行函数,需要把线程放到字典里,否则函数拿不到返回值

    import threading

    def down_load():

      print('完毕!')

    for i in rang(5):

      t = threading.Thread(target=down_load,args=(url,))  # 如果函数里有多个参数,那么需要加args字段

      t.start()

    print(threading.activeCount())   #查看当前线程数
    print(threading.current_thread())  #查看当前线程

    二.线程池

    pool = threadpool.ThreadPool(20)  #实例化一个线程池
    reqs = threadpool.makeRequests(down_load_pic,url_list)  #分配数据
    [pool.putRequest(req) for req in reqs]
    # for req in reqs:
    # pool.putRequest(req)
    print(threading.activeCount())
    pool.wait() #等待
    print('end')

    三.锁

    多个线程操作同一个数据的时候,就得加锁

    import threading

    lock = threading.Lock() #申请一把锁

    lock.acquire()  #加锁
    lock.release()  #解锁    #如果不解锁就会变成死锁

    # with lock:  简写,用with也会帮你加锁,解锁

    四.多进程

    import multiprocessing,time
    def down_load():
      time.sleep(2)
      print("运行完了")

    if __name__ == '__main__':    # win下需要加这个函数,否则报错
      for i in range(5):
      p = multiprocessing.Process(target=down_load)
      p.start()

      while len(multiprocessing.active_children())!=0:  #等待子进程结束
      pass

      print(multiprocessing.current_process())

      print('end')

  • 相关阅读:
    位运算的简单简要
    Date()函数详细参数
    Android画图之Matrix(二)
    图像渐变特效的简单介绍
    Android MotionEvent中getX()和getRawX()的区别
    Timer计时器
    android中raw文件夹和asset文件夹的共同点和区别
    Selector、shape详解
    select语句后以for update结尾
    Openfire(原来的Wildfire) 在 Web 2.0 中的作用
  • 原文地址:https://www.cnblogs.com/wangyujian/p/11892832.html
Copyright © 2011-2022 走看看