day35 python中进程

目录

一、开启进程

二、开启多个子进程 

1.实例化多个Process类

2.循环 

三、通过类开启一个进程

 1.开启一个进程

2. 开启一个进程(传参)

四、数据隔离


一、开启进程

windows操作系统中 创建进程的语句一定要放在"if __name__ == '__main__':"条件语句下面

import os
from multiprocessing import Process


def func():
    print('子进程',os.getpid())
    print('主进程',os.getppid())
    print(123)

 # 如果主进程中的代码已经结束了,子进程还没结束,主进程会等待子进程
if __name__ == '__main__':
    p = Process(target=func)    # 创建一个进程对象
    print('主进程',os.getpid())
    p.start()                   # 执行了start才有进程
    print('主进程',os.getpid())

import time
from multiprocessing import Process

def func(money):
    time.sleep(3)
    print("取钱:%d" % money)


# p.join 就是主进程会阻塞在join的位置,等待p进程结束
if __name__ == '__main__':
    p = Process(target=func, args=(1,))
    p.start()
    print('去取钱')
    p.join()   # 阻塞
    print('取完钱了')

二、开启多个子进程 

1.实例化多个Process类

#开启多个子进程
from multiprocessing import Process
import os


def func():
    print('子进程%d干的事,父进程:%d' % (os.getpid(), os.getppid()))


if __name__ == '__main__':
    p = Process(target=func)
    p1 = Process(target=func)
    p2 = Process(target=func)
    p.start()
    p1.start()
    p2.start()
    p.join()
    print('-------主进程------')

2.循环 

from multiprocessing import Process
import os
import time


def func(i):
    time.sleep(1)
    print('%d:子进程%d干的事,父进程:%d' % (i, os.getpid(), os.getppid()))


# 这个字符串'-----主进程-----'只是在序号为九的进程之后打印
if __name__ == '__main__':
    for i in range(10):
        p = Process(target=func, args=(i,))
        p.start()
    p.join()
    print('-----主进程-----')

 

 

from multiprocessing import Process
import os
import time


def func(i):
    time.sleep(1)
    print('%d:子进程%d干的事,父进程:%d' % (i, os.getpid(), os.getppid()))


# 这个字符串'-----主进程-----'一定是在所有进程之后打印,且进程的启动是按顺序的
if __name__ == '__main__':
    for i in range(10):
        p = Process(target=func, args=(i,))
        p.start()
        p.join()
    print('-----主进程-----')

 

from multiprocessing import Process
import os
import time


def func(i):
    time.sleep(1)
    print('%d:子进程%d干的事,父进程:%d' % (i, os.getpid(), os.getppid()))


if __name__ == '__main__':
    p_lst= []
    for i in range(10):
        p = Process(target=func, args=(i,))
        p.start()
        p_lst.append(p)
    for p in p_lst:
        p.join()
    print('-----主进程-----')

三、通过类开启一个进程

通过类开启一个进程:
必须创建一个类,必须继承Process类
必须实现一个run方法
实例化Myprocess得到一个对象
使用对象调用start方法

 1.开启一个进程

import os
from multiprocessing import Process


class MyProcess(Process):
    def run(self):
        print('子进程:%d' % os.getpid())


if __name__ == '__main__':
    p = MyProcess()
    p.start()
    print('主进程:%d' % os.getpid())

 2. 开启一个进程(传参)

# 通过类开启一个进程(传参)
import os
from multiprocessing import Process


class MyProcess(Process):
    def __init__(self, arg1, arg2, arg3):
        super().__init__()
        self.arg1 = arg1
        self.arg2 = arg2
        self.arg3 = arg3

    def run(self):
        print('子进程:', os.getpid(), self.arg1, self.arg2, self.arg3)


if __name__ == '__main__':
    p = MyProcess(1,2,3)
    p.start()   # 会默认调用run方法
    print('主进程:%d' % os.getpid())

# 通过类开启一个进程(传参)
import os
from multiprocessing import Process


class MyProcess(Process):
    def __init__(self, arg1, arg2, arg3):
        super().__init__()
        self.arg1 = arg1
        self.arg2 = arg2
        self.arg3 = arg3

    def run(self):
        print('(run方法)子进程:', os.getpid(), self.arg1, self.arg2, self.arg3)
        self.walk()   # 子进程调用

    def walk(self):
        print('(walk方法)进程:%d' % os.getpid())



if __name__ == '__main__':
    p = MyProcess(1,2,3)
    p.start()   # 会默认调用run方法
    p.walk()    # 主进程调用
    print('主进程:%d' % os.getpid())

四、数据隔离

# 进程与进程之间数据是隔离的
from multiprocessing import Process
n = 100

def func():
    global n
    n= n - 1
    print('子进程:',n) # 99


if __name__ == '__main__':
    print('主进程:', n)  # 100
    p = Process(target=func)
    p.start()
    p.join()
    print('主进程:', n)  # 100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值