__author__ = 'admin' from gevent import monkey monkey.patch_all(thread=False) import gevent,time,os from threading import Thread,currentThread from multiprocessing import Process,Pool,current_process from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor def thread_fun(item): print('\033[33m <name:%s> <value:%s> <pid:%s> start...'%(currentThread().name,item,os.getpid())) time.sleep(1) print('\033[33m <name:%s> <value:%s> <pid:%s> end...'%(currentThread().name,item,os.getpid())) def process_fun(item): print('\033[35m <name:%s> <value:%s> <pid:%s> start...'%(current_process().name,item,os.getpid())) time.sleep(1) print('\033[35m <name:%s> <value:%s> <pid:%s> start...'%(current_process().name,item,os.getpid())) def gevent_fun(item): print('\033[36m <name:%s> <value:%s> <pid:%s> start...'%(currentThread().name,item,os.getpid())) time.sleep(1) print('\033[36m <name:%s> <value:%s> <pid:%s> end...'%(currentThread().name,item,os.getpid())) return item**2 def thread_pool_fun(item): print('\033[32m <name:%s> <value:%s> <pid:%s> start...'%(currentThread().name,item,os.getpid())) time.sleep(1) print('\033[32m <name:%s> <value:%s> <pid:%s> end...'%(currentThread().name,item,os.getpid())) return item**2 def thread_pool_fun_callback(item): print('\033[31m <name:%s> <value:%s> <pid:%s> start...'%(currentThread().name,item,os.getpid())) time.sleep(1) print('\033[31m <name:%s> <value:%s> <pid:%s> end...'%(currentThread().name,item,os.getpid())) def process_pool_fun(item): print('\033[30m <name:%s> <value:%s> <pid:%s> start...'%(current_process().name,item,os.getpid())) time.sleep(1) print('\033[30m <name:%s> <value:%s> <pid:%s> end...'%(current_process().name,item,os.getpid())) return item**2 def process_pool_fun_callback(item): print('\033[29m <name:%s> <value:%s> <pid:%s> start...'%(current_process().name,item,os.getpid())) time.sleep(1) print('\033[29m <name:%s> <value:%s> <pid:%s> end...'%(current_process().name,item,os.getpid())) def pool_fun(item): print('\033[28m <name:%s> <value:%s> <pid:%s> start...'%(current_process().name,item,os.getpid())) time.sleep(1) print('\033[28m <name:%s> <value:%s> <pid:%s> end...'%(current_process().name,item,os.getpid())) return item**2 def pool_fun_callback(item): print('\033[33m <name:%s> <value:%s> <pid:%s> start...'%(current_process().name,item,os.getpid())) time.sleep(1) print('\033[33m <name:%s> <value:%s> <pid:%s> end...'%(current_process().name,item,os.getpid())) return item**2 if __name__ == '__main__': # 開啓單純進程、線程、協成的方法 def thread(value): threads = [] for i in range(value): t = Thread(target=thread_fun,args=(i,)) threads.append(t) t.start() for obj in threads: obj.join() print('--------->thread is end') def process(value): processs = [] for i in range(value): p = Process(target=process_fun,args=(i,)) processs.append(p) p.start() for obj in processs: obj.join() print('------>process is end') def gev(value): Gevents = [] for i in range(value): g = gevent.spawn(gevent_fun,i) Gevents.append(g) gevent.joinall(Gevents) res = [obj.value for obj in Gevents] print(res) print('------>gevent is end') def thread_pool(value): thp = ThreadPoolExecutor(4) targets = [] for i in range(value): target = thp.submit(thread_pool_fun,i) # target = thp.submit(thread_pool_fun,i).add_done_callback(thread_pool_fun_callback) #這種方式使用回調函數,就不能再獲取函數(第一個、第二個)的返回值,如果使用result()會報錯,報錯原因是沒有result屬性 targets.append(target) thp.shutdown() res = [obj.result() for obj in targets] # obj = thp.map(thread_pool_fun,range(5)) # res = list(obj) print(res) print('------>ThreadPoolExecutor is end') def process_pool(value): pop = ProcessPoolExecutor(4) targets = [] for i in range(value): target = pop.submit(process_pool_fun,i) # target = pop.submit(process_pool_fun,i).add_done_callback(process_pool_fun_callback) # 這種方式使用回調函數,就不能再獲取函數(第一個、第二個)的返回值,如果使用result()會報錯,報錯原因是沒有result屬性 targets.append(target) pop.shutdown() res = [obj.result() for obj in targets] # obj = pop.map(process_pool_fun,range(value)) # res = list(obj) print(res) print('------>ProcessPoolExecutor is end') def pool(value): targets = [] p = Pool(4) for i in range(value): target = p.apply_async(func=pool_fun,args=(i,)) # target = p.apply_async(func=pool_fun,args=(i,),callback=pool_fun_callback) # 注意一點的是,在回調函數下使用get()方法取得的結果仍然是第一個函數處理後的結果 targets.append(target) p.close() p.join() res = [obj.get() for obj in targets] # obj = p.map(pool_fun,range(5)) # obj = p.map_async(pool_fun,range(5)) # map()函數的使用 # res = list(obj)#第一種map的獲取結果方式,是個列表 # res = obj.get()#第二種map的獲取結果方式 print(res) print('------>processpool is end') #開啓組合多進程、線程、協成的方法 def run(process_num,thread_num,gevent_num): t_pool = ThreadPoolExecutor(4) p_pool = ProcessPoolExecutor(4) processs = [] threads = [] gevents = [] for i in range(process_num): obj = p_pool.submit(process_pool_fun,i) processs.append(obj) for i in range(thread_num): obj = t_pool.submit(thread_pool_fun,i) threads.append(obj) for i in range(gevent_num): obj = gevent.spawn(gevent_fun,i) gevents.append(obj) p_pool.shutdown() t_pool.shutdown() gevent.joinall(gevents) p_result = [item.result() for item in processs] t_result = [item.result() for item in threads] g_value = [item.value for item in gevents] print('<p_result:%s>'%p_result) print('<t_result:%s>'%t_result) print('<g_value:%s>'%g_value) # 調用單純開啓進程、線程、協成的方式 # thread(5) # process(5) # gev(5) # thread_pool(5) # process_pool(5) # pool(5) # 調用混合開啓進程、線程、協成的方式 # run(5,5,5)
進程線程協程開啓
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.