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()