1,os.fork() 方法import osret = os.fork()if ret == 0:#子进程print(Sub process pid = %d, Sub process ppid = %d % (os.getpid(), os.getppid()))else:#父进程print(Parent Process ret = %d % ret)print(P...
1,os.fork() 方法
import os
ret = os.fork()
if ret == 0:
#子进程
print("Sub process pid = %d, Sub process ppid = %d" % (os.getpid(), os.getppid()))
else:
#父进程
print("Parent Process ret = %d" % ret)
print("Parent Process pid = %d" % os.getpid())
在该方法中,执行os.fork()会再创建一个进程,原进程(父进程)返回一个大于零的值(即ret > 0),这个值恰好是子进程的pid;而创建的新进程会返回零(即ret = 0)。
fork炸弹:在用户输入栏输入:
while True:
os.fork()
设备内存就会很快被塞满,然后down掉。
2,Process方法
from multiprocessing import Process
def func():
print("i am subprocess")
new_process = Process(tartget=func)
print("i am Parent Process")
Process方法需要指定一个函数,且父进程会等待子进程结束。另外可以新建一个example类继承Process类,然后重写__init__和run()函数,之后调用example.start(),它就会自动执行run()函数。
3,Pool方法
from multiprocessing import Pool
import time
def worker(x):
for j in range(1, 11):
print("%d:%d" % (x, j))
time.sleep(1)
pool = Pool(3) # run 3 process simultaneously
for i in range(1, 11):
print(i)
pool.apply_async(worker, (i,))
print("---start---")
pool.close() # 关闭进程池,不允许继续添加进程
pool.join() # 等待进程池中的所有进程结束
print("---end---")
Pool方法即进程池,需要说明有几个进程同时运行。在使用apply_async方法时第一个参数是函数名,第二个参数需要输入一个元组。在示例代码中,进程池同时允许三个进程运行,另外七个进程排队等候,当第一批的三个进程执行完后,第二批的三个再执行。所以进程池相当于起到了缓冲的作用。
实际上,在进程池的方式中,父进程基本上只需要等待子进程执行(使用pool.join()进行等待),任务都是交给子进程执行的。
本文标题为:Python3 三种进程创建方法
基础教程推荐
- 基于Python实现股票数据分析的可视化 2023-08-04
- centos系统 anaconda3(python3)安装pygrib 2023-09-04
- python的环境conda简介 2022-10-20
- Python爬取当网书籍数据并数据可视化展示 2023-08-11
- Centos7下安装python环境 2023-09-04
- CentOS 7.5 安装 Python3.7 2023-09-03
- ubuntu 18 python3.6 的安装与 python2的版本切换 2023-09-03
- Python 中 Elias Delta 编码详情 2023-08-08
- Python基础学习之函数和代码复用详解 2022-09-02
- 四步教你学会打包一个新的Python模块 2022-10-20