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

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/84330952
今日推荐