ThreadPoolExecutor - callback guaranteed to run in same thread as the submitted function?
Marko Rauhamaa
marko at pacujo.net
Thu Sep 25 05:46:55 EDT 2014
Ian Kelly <ian.g.kelly at gmail.com>:
> 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:
...
f.add_done_callback(self.callback)
The code will deadlock if the callback is invoked immediately.
Marko
More information about the Python-list
mailing list