## BUG for concurrent.futures(Found by william).py import os import time import asyncio from threading import currentThread from multiprocessing import current_process from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor number = 0 async def Wheel(exe_iter, sub_iter): print("exe_iter:{!r} sub_iter:{!r}".format(exe_iter, sub_iter)) result = sub_iter * 2 print("Run for Wheel and result:%s" % result) global number number += 1 callback(number) def callback(number): print("callback number:%s" % number) print("=" *30) def sub_loop(exe_iter): # print('%s:<%s> is ProcessExecuting [%s]' %(current_process().name,os.getpid(),exe_iter)) SubLoop_Iterator = range(2) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) with ThreadPoolExecutor() as executor: for sub_iter in SubLoop_Iterator: print('%s:<%s> is ThreadExecuting [%s]' %(currentThread().getName(),os.getpid(),sub_iter)) executor.submit(loop.run_until_complete(Wheel(exe_iter, sub_iter))) loop.close() async def Executor(event_loop): Executor_Iterator = range(2) executor = ProcessPoolExecutor() with ProcessPoolExecutor() as executor: for exe_iter in Executor_Iterator: # print('%s:<%s> is ProcessExecuting [%s]' %(current_process().name,os.getpid(),exe_iter)) await event_loop.run_in_executor(executor, sub_loop, exe_iter) if __name__ == '__main__': event_loop = asyncio.get_event_loop() try: event_loop.run_until_complete(Executor(event_loop)) finally: asyncio.sleep(0) event_loop.close() print("=" *60)