submit
def submit(self, fn, *args, **kwargs):
with self._shutdown_lock:
if self._broken:
raise BrokenThreadPool(self._broken)
if self._shutdown:
raise RuntimeError('cannot schedule new futures after shutdown')
if _shutdown:
raise RuntimeError('cannot schedule new futures after '
'interpreter shutdown')
f = _base.Future()
w = _WorkItem(f, fn, args, kwargs)
self._work_queue.put(w)
self._adjust_thread_count()
return f
1、submit的时候进入 with self._shutdown_lock
: 这个锁是为了同一个进程池在不同线程中加任务是不冲突。
2、f = _base.Future()
创建每个任务的Future实例。
3、w = _WorkItem(f, fn, args, kwargs)
创建每个任务的对象实例,这个实例会被加入到任务队列中self._work_queue.put(w)
,等待被线程get
。可以看到Future和任务函数都在这个任务中。
4、self._adjust_thread_count()<