python3之程序
阿新 • • 發佈:2018-11-16
1建立一個程序:
import time import multiprocessing import os def text1(): while True: print("111111111111") print(os.getpid(), os.getppid()) time.sleep(1) def text2(): while True: print("222222222222") print(os.getpid(), os.getppid()) time.sleep(1) def main(): # text1() # text2() print(os.getpid()) #程序的pid p1 = multiprocessing.Process(target=text1, ) #建立程序 p2 = multiprocessing.Process(target=text2, ) p1.start() #執行程序 p2.start() if __name__ == "__main__": main()
2 程序與程序之間是不共享資料的,如果想實現程序之間的資料共享;需要Queue佇列來實現:
q = multiprocessing.Queue() 建立佇列
q.put() 向佇列裡面存放資料
q.get() 從佇列裡面獲取資料
q.empty() 佇列為空
import multiprocessing import time nums = [11,22,33,44] def text1(q): nums.append(55) print(nums) for temp in nums: q.put(temp) while True: print("11111111") time.sleep(1) def text2(q): new_nums = [] while True: data = q.get() new_nums.append(data) if q.empty(): break print(new_nums) while True: print("222222222") time.sleep(1) def main(): q = multiprocessing.Queue() #建立佇列 """ 一個程序向Queue中寫入資料,另外一個程序從Queue中獲取資料, 通過Queue完成了 多個需要配合的程序間的資料共享,從而能夠 起到 解耦的作用 """ p1 = multiprocessing.Process(target=text1,args=(q, )) #傳遞引數 p2 = multiprocessing.Process(target=text2,args=(q, )) p1.start() p2.start() if __name__ == "__main__": main()
3程序池:
import multiprocessing import time, os, random def text(i): time_start = time.time() print("開始時間:%d" % time_start) print("%d 的程序:%d" %(i,os.getpid())) time.sleep(random.random()*2) time_end = time.time() print("執行耗時:%s" %(time_end - time_start)) def main(): po = multiprocessing.Pool(3) #定義一個程序池,最大程序數為3 for i in range(0,10): po.apply_async(text,(i,)) #向程序池中新增程序 po.close() #關閉程序池, po.join() if __name__ == "__main__": main()