1. 程式人生 > >python3之程序

python3之程序

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