from time import ctime, sleep
import threading
import numpy as np
import collections
loops =[1e6,1e7]classMyThread(threading.Thread):def__init__(self, func, args, name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
self.result = self.func(*self.args)defget_result(self):try:return self.result
except Exception:returnNonedefloop(num):sum=0for i inrange(1,num+1):sum=sum+ i
returnsumdefmain():print('Start:', ctime())
threads =[]
nloops =range(len(loops))for i in nloops:
t = MyThread(loop,(int(loops[i]),), loop.__name__)
threads.append(t)for i in nloops:# start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
threads[i].start()for i in nloops:# jion()方法等待线程完成
threads[i].join()for i in nloops:# jion()方法等待线程完成print(threads[i].get_result())print('Done:', ctime())if __name__ =='__main__':
main()
Python 多进程代码
import multiprocessing
import time
defloop(num):sum=0for i inrange(1,num+1):sum=sum+ i
returnsumif __name__ =='__main__':print('Start:', ctime())
pool = multiprocessing.Pool(multiprocessing.cpu_count())
result =[]
loops =[1e6,1e7]for i inrange(len(loops)):
result.append(pool.apply_async(loop,(int(loops[i]),)))
pool.close()
pool.join()for res in result:print(res.get())print('Done:', ctime())
Python 线程池和进程池
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
import time
loops =[1e6,1e7]defloop(num,num1):sum=0for i inrange(1,num+1):sum=sum+ i
returnsumdefmain():print('Start:', ctime())
tasks =[]
nloops =range(len(loops))
executor = ThreadPoolExecutor(max_workers=8)# ProcessPoolExecutor(8)for i in nloops:
tasks.append(executor.submit(loop,int(loops[i]),5))for i in nloops:# start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法print(tasks[i].result())print('Done:', ctime())if __name__ =='__main__':
main()