Python创建子进程
方法1 os.fork()windows上不支持,mac,linux,unix上可以import ospid = os.fork()# 操作系统自动把父进程的信息资源复制给了子进程,在两个进程中分别返回,父进程返回子进程的IDif pid < 0:print('fork失败')elif pid == 0:# 子进程的pid为 0print('我是子进程',os.getpid(),'我的父进程
·
方法1 os.fork()
windows上不支持,mac,linux,unix上可以
import os
pid = os.fork() # 操作系统自动把父进程的信息资源复制给了子进程,在两个进程中分别返回,父进程返回子进程的ID
if pid < 0:
print('fork失败')
elif pid == 0: # 子进程的pid为 0
print('我是子进程',os.getpid(),'我的父进程',os.getppid()) # os.getpid()获取当前进程的编号,os.getppid()获取当前进程的父进程的编号
else:
print('我是父进程',os.getpid())
尝试用子进程改变全局变量
import os
# 尝试改变全局变量
num = 0
pid = os.fork()
if pid < 0:
print('fork失败')
elif pid == 0:
print('我是子进程',os.getpid(),'我的父进程',os.getppid())
num += 1
print(num) # 结果:num = 1
else:
print('我是父进程',os.getpid())
num += 1
print(num) # 结果:num = 1
# 结论:子进程无法改变全局变量,因为子进程改变的是拷贝的父进程的num值
方法2 Process()
可以在多平台上创建子进程(包括windows)
from multiprocessing import Process
import os
def child_process_func(name):
"""
当前函数是交给子进程实现
:return:
"""
print('当前执行的进程是子进程,进程编号是{},父进程编号是{},当前子进程的名字是{}'.format(os.getpid(),os.getppid(),name))
if __name__ == '__main__':
# TODO 打印父进程ID
print("父进程的ID", os.getpid())
# TODO 创建子进程
cp = Process(target=child_process_func,args=('子进程',)) # 元组只有一个元素时要加,target说明使用的方法/对象
# def __init__(self, group=None, target=None, name=None, args=(), kwargs={}): //agrs=(),打包成元组
cp.start()
print(cp.name,cp.pid) # 获取子进程的名字,进程名为1 获取子进程的pid
# print('结束主进程') # 子进程没结束,主进程就结束了
cp.join() # 等所有进程完成后,主进程才结束
print('结束主进程')
在windows上执行有可能会出现下面情况,避其锋芒,我选择linux执行 😡
Process finished with exit code -1073741819 (0xC0000005)
更多推荐
已为社区贡献1条内容
所有评论(0)