Threading多线程

2018-12-13  本文已影响0人  冬至是条狗

Python的线程受限制于GIL锁,所以在处理大量运算时不占优势。Cpython解释器的原因。但是日常所用多数属于IO密集型程序,开销要比进程小的多,而且速度快。

Threading模块中除了常用的Thread类还有一些方法:

关于守护线程

线程锁

信号量

事件

定时器Timer()

队列 queue

线程池

使用python中新模块,concurrent中的线程池,同样也有进程池

import time
from concurrent.futures import ThreadPoolExecutor


def func(n):
    time.sleep(2)
    print(n)


tpool = ThreadPoolExecutor(max_workers=5)
for i in range(20):
    tpool.submit(func, i)

回调函数

  def func(n):
      time.sleep(2)
      print(n)
      return n*n


  def call_back(n):
      print("执行的结果是:", n.result())  # 这里传入的时一个对象,需要进行result


  tpool = ThreadPoolExecutor(max_workers=5)

  for i in range(20):
      tpool.submit(func, i).add_done_callback(call_back)

  # tpool.shutdown()  # 等待所有线程执行完,并回收资源后继续执行主线程
  print("主进程")
上一篇下一篇

猜你喜欢

热点阅读