多线程:
import threading
from concurrent import futures
import time
import logging
logging.basicConfig(format='%(thread)s %(threadName)s %(message)s',level=logging.INFO)
def work(n):
logging.info('working-{}'.format(n))
time.sleep(5)
logging.info('end work-{}'.format(n))
executor = futures.ThreadPoolExecutor(3)
fs = []
for i in range(3):
f = executor.submit(work,i)
fs.append(f)
for i in range(3,6):
f = executor.submit(work,i)
fs.append(f)
while True:
time.sleep(2)
logging.info(threading.enumerate())
flag = True
for f in fs:
flag = flag and f.done()
if flag:
executor.shutdown()
logging.info(threading.enumerate())
break
运行结果:
140342196143872 Thread-1 working-0
140342187751168 Thread-2 working-1
140342179358464 Thread-3 working-2
140342243120896 MainThread [<_MainThread(MainThread, started 140342243120896)>, <Thread(Thread-1, started daemon 140342196143872)>, <Thread(Thread-2, started daemon 140342187751168)>, <Thread(Thread-3, started daemon 140342179358464)>]
140342243120896 MainThread [<_MainThread(MainThread, started 140342243120896)>, <Thread(Thread-1, started daemon 140342196143872)>, <Thread(Thread-2, started daemon 140342187751168)>, <Thread(Thread-3, started daemon 140342179358464)>]
140342187751168 Thread-2 end work-1
140342187751168 Thread-2 working-3
140342196143872 Thread-1 end work-0
140342196143872 Thread-1 working-4
140342179358464 Thread-3 end work-2
140342179358464 Thread-3 working-5
140342243120896 MainThread [<_MainThread(MainThread, started 140342243120896)>, <Thread(Thread-1, started daemon 140342196143872)>, <Thread(Thread-2, started daemon 140342187751168)>, <Thread(Thread-3, started daemon 140342179358464)>]
140342243120896 MainThread [<_MainThread(MainThread, started 140342243120896)>, <Thread(Thread-1, started daemon 140342196143872)>, <Thread(Thread-2, started daemon 140342187751168)>, <Thread(Thread-3, started daemon 140342179358464)>]
140342187751168 Thread-2 end work-3
140342179358464 Thread-3 end work-5
140342243120896 MainThread [<_MainThread(MainThread, started 140342243120896)>, <Thread(Thread-1, started daemon 140342196143872)>, <Thread(Thread-2, started daemon 140342187751168)>, <Thread(Thread-3, started daemon 140342179358464)>]
140342196143872 Thread-1 end work-4
140342243120896 MainThread [<_MainThread(MainThread, started 140342243120896)>, <Thread(Thread-1, started daemon 140342196143872)>, <Thread(Thread-2, started daemon 140342187751168)>, <Thread(Thread-3, started daemon 140342179358464)>]
140342243120896 MainThread [<_MainThread(MainThread, started 140342243120896)>]
多进程:
import threading
from concurrent import futures
import time
import logging
logging.basicConfig(format='%(thread)s %(threadName)s %(message)s',level=logging.INFO)
def work(n):
logging.info('working-{}'.format(n))
time.sleep(5)
logging.info('end work-{}'.format(n))
if __name__ == '__main__':
executor = futures.ProcessPoolExecutor(3)
fs = []
for i in range(3):
f = executor.submit(work,i)
fs.append(f)
for i in range(3,6):
f = executor.submit(work,i)
fs.append(f)
while True:
time.sleep(2)
flag = True
for f in fs:
flag = flag and f.done()
if flag:
executor.shutdown()
break
运行结果:
140665507444480 MainThread working-1
140665507444480 MainThread working-0
140665507444480 MainThread working-2
140665507444480 MainThread end work-0
140665507444480 MainThread end work-1
140665507444480 MainThread working-3
140665507444480 MainThread working-4
140665507444480 MainThread end work-2
140665507444480 MainThread working-5
140665507444480 MainThread end work-4
140665507444480 MainThread end work-3
140665507444480 MainThread end work-5