python futures.ThreadPoolExecutor实现

  • 线程池的通过self._threads来维护
  • 通过threading.Semaphore(0)来监控可用线程数
  • 线程创建流程
# 如果有可用的线程则直接返回
if semaphore.acquire(False):
    return

# 如果没有可用的线程且线程池未满,则创建新的线程并放入池中
# 也就是说该过程在执行一段时间后不会再执行
if len(self._threads) < max_threads:
    self._threads.add(create_thread_task())

线程任务执行逻辑

  • 开启一个while True循环,并不断的从ThreadPoolExecutor().queue中阻塞获取任务(在创建任务时,将ThreadPoolExecutor().queue以参数的形式传入)
  • 在执行完成后会释放semaphore,标识有线程可供使用
  • 通过向queue中放入None来终止pool

创建执行任务

  • 通过submit(fn, *args, **kwargs)创建任务_WorkItem实例,放入队列中
  • 任务执行结果放入Future对象中,并将该Future对象返回

你可能感兴趣的:(python futures.ThreadPoolExecutor实现)