1. 程式人生 > >[python]多程序介紹和使用

[python]多程序介紹和使用

# import os
# fork只能用於linux/unix中, fork會建立一個子程序
# pid = os.fork()
# print("bobby")
# if pid == 0:				#子程序pid是0
#   print('子程序 {} ,父程序是: {}.' .format(os.getpid(), os.getppid()))
# else:
#   print('我是父程序:{}.'.format(pid))

fork出來一個子程序之後,就有兩個程序一起進行了,一個主程序,一個子程序
所以會print 兩次bobby
if判斷裡面 兩個也都會列印
import multiprocessing

#多程序程式設計
import time
def get_html(n):
    time.sleep(n)
    print("sub_progress success")
    return n

class GetHtml(multiprocessing):    #多程序 和執行緒一樣,可以使用類來編寫
	def run(self, n):
		time.sleep(n)
	    print("sub_progress success")
   		return n

if __name__ == "__main__":
    # progress = multiprocessing.Process(target=get_html, args=(2,))
    # print(progress.pid)
    # progress.start()
    # print(progress.pid)      #程序start之後,可以獲取程序的pid
    # progress.join()
    # print("main progress end")

    #使用執行緒池
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    # result = pool.apply_async(get_html, args=(3,))
    #
    # #等待所有任務完成
    # pool.close()		#要先close,禁止其他程序進來。才能join堵塞,等待所有程序完成
    # pool.join()
    #
    # print(result.get())     # 獲取程序結果,return值

    #imap
    # for result in pool.imap(get_html, [1,5,3]):
    #     print("{} sleep success".format(result))
    # 這個列印順序 是  1 5 3

    for result in pool.imap_unordered(get_html, [1,5,3]):
        print("{} sleep success".format(result))
#這個的列印順序是   1 3 5,先完成的程序先列印