]> granicus.if.org Git - python/commitdiff
Followup to 51c1f2cedb96 (and issue #12456):
authorAntoine Pitrou <solipsis@pitrou.net>
Sun, 3 Jul 2011 11:17:06 +0000 (13:17 +0200)
committerAntoine Pitrou <solipsis@pitrou.net>
Sun, 3 Jul 2011 11:17:06 +0000 (13:17 +0200)
qsize() raises NotImplementedError on OS X, don't use it.

Lib/concurrent/futures/process.py

index 689f9ba99c5ad16fd39e806fd4c4cd3e805e5f38..41e132020e1799d457924569a3fcbdfb1a063093 100644 (file)
@@ -204,7 +204,7 @@ def _queue_management_worker(executor_reference,
         # This is an upper bound
         nb_children_alive = sum(p.is_alive() for p in processes.values())
         for i in range(0, nb_children_alive):
-            call_queue.put(None)
+            call_queue.put_nowait(None)
         # If .join() is not called on the created processes then
         # some multiprocessing.Queue methods may deadlock on Mac OS X.
         for p in processes.values():
@@ -265,18 +265,18 @@ def _queue_management_worker(executor_reference,
         #   - The executor that owns this worker has been collected OR
         #   - The executor that owns this worker has been shutdown.
         if shutting_down():
-            # Since no new work items can be added, it is safe to shutdown
-            # this thread if there are no pending work items.
-            if not pending_work_items and call_queue.qsize() == 0:
-                shutdown_worker()
-                return
             try:
-                # Start shutting down by telling a process it can exit.
-                call_queue.put_nowait(None)
+                # Since no new work items can be added, it is safe to shutdown
+                # this thread if there are no pending work items.
+                if not pending_work_items:
+                    shutdown_worker()
+                    return
+                else:
+                    # Start shutting down by telling a process it can exit.
+                    call_queue.put_nowait(None)
             except Full:
                 # This is not a problem: we will eventually be woken up (in
-                # result_queue.get()) and be able to send a sentinel again,
-                # if necessary.
+                # result_queue.get()) and be able to send a sentinel again.
                 pass
         executor = None