diff -r ede0a342ed7e Lib/concurrent/futures/_base.py --- a/Lib/concurrent/futures/_base.py Thu Jan 23 16:49:22 2014 +0200 +++ b/Lib/concurrent/futures/_base.py Thu Jan 23 14:12:33 2014 -0500 @@ -251,10 +251,11 @@ completed. The second set, named 'not_done', contains uncompleted futures. """ + fs = set(fs) with _AcquireFutures(fs): done = set(f for f in fs if f._state in [CANCELLED_AND_NOTIFIED, FINISHED]) - not_done = set(fs) - done + not_done = fs - done if (return_when == FIRST_COMPLETED) and done: return DoneAndNotDoneFutures(done, not_done)