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

相关推荐

  1. python基础——进程

    2024-01-25 01:26:01       61 阅读
  2. python 进程

    2024-01-25 01:26:01       52 阅读
  3. 进程基础(命令的基石

    2024-01-25 01:26:01       37 阅读
  4. 文件基础进程基石

    2024-01-25 01:26:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 01:26:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 01:26:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 01:26:01       82 阅读
  4. Python语言-面向对象

    2024-01-25 01:26:01       91 阅读

热门阅读

  1. WPF关键帧动画

    2024-01-25 01:26:01       63 阅读
  2. 75.实现统一异常处理和封装统一返回结果

    2024-01-25 01:26:01       59 阅读
  3. 2024年阿里云优惠云服务器新版价格整理

    2024-01-25 01:26:01       61 阅读
  4. 【嵌入式——C++】引用

    2024-01-25 01:26:01       53 阅读
  5. 论文素材:PSO算法介绍

    2024-01-25 01:26:01       55 阅读
  6. mysql单表查询练习题

    2024-01-25 01:26:01       54 阅读
  7. 在 Spring Boot 中使用事务

    2024-01-25 01:26:01       52 阅读