Python 程序,多程序,獲取程序id,給子程序傳遞引數
阿新 • • 發佈:2018-12-07
執行緒與執行緒之間共享全域性變數,程序之間不能共享全域性變數。
程序與程序相互獨立 (可以通過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()