1. 程式人生 > >Python 程序,多程序,獲取程序id,給子程序傳遞引數

Python 程序,多程序,獲取程序id,給子程序傳遞引數

 

執行緒與執行緒之間共享全域性變數,程序之間不能共享全域性變數。
程序與程序相互獨立  (可以通過socket套接字實現程序間通訊,可以通過硬碟(檔案)實現程序通訊,也可以通過佇列(Queue)實現程序通訊)

子程序會拷貝複製主程序中的所有資源(變數、函式定義等),所以子程序比子執行緒耗費資源。
 

demo.py(多程序):

import threading   # 執行緒
import time
import multiprocessing   # 程序


def test1():
    while True:
        print("1--------")
        time.sleep(1)


def test2():
    while True:
        print("2--------")
        time.sleep(1)


def main():
    # t1 = threading.Thread(target=test1)  # 執行緒
    # t2 = threading.Thread(target=test2)
    # t1.start()   # 多執行緒的方式實現多工
    # t2.start()

    p1 = multiprocessing.Process(target=test1)  # 程序 (程序比執行緒佔用資源多)
    p2 = multiprocessing.Process(target=test2)
    p1.start()   # 多程序的方式實現多工 (程序比執行緒佔用資源多)
    p2.start()

if __name__ == "__main__":
    main()

demo.py(獲取程序、父程序id):

import multiprocessing
import os
import time


def test():
    while True:
        print("----in 子程序 pid=%d ,父程序的pid=%d---" % (os.getpid(), os.getppid()))
        time.sleep(1)


def main():
    # os.getpid() 獲取當前程序的程序id
    # os.getppid()  獲取當前程序的父程序id
    print("----in 主程序 pid=%d---父程序pid=%d----" % (os.getpid(), os.getppid()))
    p = multiprocessing.Process(target=test)
    p.start()  # 開啟子程序


if __name__ == "__main__":
    main()

demo.py(給子程序傳遞引數):

import multiprocessing


def test(a, b, c, *args, **kwargs):
    print(a)  # 11
    print(b)  # 22
    print(c)  # 33
    print(args)    # (44, 55, 66, 77, 88)
    print(kwargs)  # {'age': 20, 'name': '張三'}


def main():

    p = multiprocessing.Process(target=test, args=(11, 22, 33, 44, 55, 66, 77, 88), kwargs={"name": "張三","age": 20})
    p.start()


if __name__ == "__main__":
    main()