ThreadPoolExecutor - callback guaranteed to run in same thread as the submitted function?

Marko Rauhamaa marko at
Thu Sep 25 11:46:55 CEST 2014

Ian Kelly <ian.g.kelly at>:

> The documentation for Future.add_done_callback says: "If the future
> has already completed or been cancelled, fn will be called
> immediately."

That sounds really bad.

There should be a guarantee that the callback is not called from the
same thread before returning from Future.add_done_callback. Otherwise,
the caller may have a really difficult time handling preemption and
avoiding deadlocks at the same time.

Example (pseudocode):

   def callback(self):
      with self.lock:

   def xyz(self, f):
      with self.lock:

The code will deadlock if the callback is invoked immediately.


More information about the Python-list mailing list