python基础——进程

multiprocessing模块

与进程相关的模块

使用main进程创建子进程

from multiprocessing import Process
import  os
def func():
    print("这是一个func函数,进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
if __name__ == '__main__':
    print("这是主函数:进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
    p = Process(target=func)
    p.start()

可以给子进程传递参数,传递的格式是一个元组

from multiprocessing import Process
import time
import  os
def func(i):
    print("这是一个func函数,进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
    print("{}".format(i))
if __name__ == '__main__':
    print("这是主函数:进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
    p = Process(target=func,args=(123,))
    p.start()

不能获取子进程的返回值

可以同时开启多个子进程,同时开启的子进程并发执行

from multiprocessing import Process
import time
import  os
def func1(i):
    print("这是一个func1函数,进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
    print("{}".format(i))
def func2(i):
    print("这是一个func2函数,进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
    print("{}".format(i))
if __name__ == '__main__':
    print("这是主函数:进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
    p = Process(target=func1,args=(123,))
    p2 = Process(target=func2,args=("456",))
    p.start()
    p2.start()

join的用法(同步阻塞)

阻塞其他进程,只有当join的进程运行完毕之后才可以执行后续进程


from multiprocessing import Process
import time
import  os
def func1(name,age):
    print("发送邮件给{}岁的{}".format(name,age))
    time.sleep(1)
    print("发送完毕!{}".format(name))
if __name__ == '__main__':
    print("这是主函数:进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
    list_new = [("a",12),("b",11),("c",10),("d",9)]
    for arg in list_new:
        p = Process(target=func1,args=arg)
        p.start()
        p.join()
    print("所有邮件全部发送完毕!")

多个进程之间数据不共享

from multiprocessing import Process
n = 0
def fuc():
    global n
    n += 1
if __name__ == '__main__':
    list_new = []
    for i in range(100):
        p = Process(target=fuc)
        p.start()
        list_new.append(p)
    for i in list_new:
        i.join()
    print(n)

使用面向对象的方法运行进程

import os
from multiprocessing import Process
class Myprocess(Process):
    def __init__(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
        super().__init__()
    def run(self):
        print("子进程:{}父进程:{}".format(os.getpid(),os.getppid()))
        print("{}|{}|{}".format(self.a,self.b,self.c))
if __name__ == '__main__':
    print("这是主进程")
    p = Myprocess(45,56,67)
    p.start()

进程的其他属性

p.pid p.ident 查看进程号

p.name 查看进程名

p.daemon 设置进程为守护进程

p.terminate  结束进程

p.is_alive 查看进程是否为活跃状态

import os
import  time
from multiprocessing import Process
class Myprocess(Process):
    def __init__(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
        super().__init__()
    def run(self):
        print("子进程:{}父进程:{}".format(os.getpid(),os.getppid()))
        print("{}|{}|{}".format(self.a,self.b,self.c))
if __name__ == '__main__':
    print("这是主进程")
    p = Myprocess(45,56,67)
    p.daemon = True
    print(p.name)
    p.is_alive()
    time.sleep(1)
    p.start()
    print(p.pid,p.ident)
    p.terminate()
    p.is_alive()

你可能感兴趣的:(python基础,笔记篇,python,开发语言)