多进程

多进程

1. 进程

现在未开辟子进程,print函数和func函数在同一个进程里
当程序运行起来操作系统会创建一个进程来供程序任务实现,这个进程我们称为主进程
进程1 .py

from multiprocessing import Process
from time import sleep
import os

def func(string):
	print('hello')



if __name__ == '__main__':
	func('123')
	print('main')

会同时输出

hello
main

如果此时修改一下,给func函数一个死循环,可以发现main永远不会打印,输出的都是hello,因为func函数会阻塞主进程
进程2 .py

from multiprocessing import Process
from time import sleep
import os


def func(string):
	while True:
		print('hello')


if __name__ == '__main__':
	
	func('123')
	print('main')

如果这样难以理解,修改一下代码,可以运行一下这个程序,观察变化

进程2 .py

from multiprocessing import Process
from time import sleep
import os


def func(string):
	while True:
		print('hello')
		sleep(2)


if __name__ == '__main__':
	
	func('123')
	while True:
		print('我是主进程')
		sleep(2)

可以发现,执行的都是func函数,每隔2秒打印hello,而我是主进程这几个字永远不会打印,因为func函数在阻塞主进程

2. 创建子进程

创建一个子进程,把func函数绑定到子进程中
多进程1 .py

from multiprocessing import Process
from time import sleep
import os

def func(string):
    while True:
        print(string)
        sleep(1)


# 当程序运行起来操作系统会创建一个进程来供程序任务实现,这个进程我们称为主进程
if __name__ == '__main__':
    # 创建一个子进程,把func函数绑定到子进程中
    p = Process(target=func,args=("我是子进程!",)) # 在主进程中创建了一个子进程
    print(p) 
    #打印一下子进程   得到的是 <Process(Process-1, initial)>
    
    while True:
        print("我是主进程!")
        sleep(1)

运行一下这个程序,发现打印的都是 **我是主进程!**这句话,为什么呢?因为这时候还没开启子进程

现在,开启子进程
显示一下进程id更便于理解

from multiprocessing import Process
from time import sleep
import os

def func(string):
    while True:
        print(string)
        print("我的id为:",os.getpid())
        sleep(2)


# 当程序运行起来操作系统会创建一个进程来供程序任务实现,这个进程我们称为主进程
if __name__ == '__main__':
    # 创建一个子进程,把func函数绑定到子进程中
    p = Process(target=func,args=("我是子进程!",)) # 在主进程中创建了一个子进程
    print(p) # <Process(Process-1, initial)>
    # 开启上面创建的子进程
    p.start()
    while True:
        print("我是主进程!")
        print("我的进程id为:",os.getpid())
        sleep(2)

运行一下这个程序,可以发现,
每隔2秒打印一次下方内容

我是主进程!
我的进程id为: 2448
我是子进程!
我的id为: 19640

我们宏观上(从肉眼上看)同时打印主进程和子进程,而实际上
是并发执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值