python系统编程篇之进程

python系统编程篇之进程

进程与程序的概念问题

编写完毕的代码,在没有运行的时候,称为程序
正在运行的代码,是进程
进程,不只是正在运行的代码,还有需要的运行环境
区分程序与进程,这两个概念是很重要的

fork

运用fork(),可以创建子进程。但是需要注意的是,fork()只能在mac,linux,UNIX系统上使用,而在windows中是不能使用的

import os

rpid = os.fork()

if rpid == 0:
    print('1')
else:
    print('2')

运行结果:
可以是1先被打印出来,也可以是2被先打印出来,
这是取决于cpu的进程调度

getpid(),getppid()

import os

rpid = os.fork()
if rpid<0:
    print("fork调用失败。")
elif rpid == 0:
    print("我是子进程(%s),我的父进程是(%s)"%(os.getpid(),os.getppid()))
    x+=1
else:
    print("我是父进程(%s),我的子进程是(%s)"%(os.getpid(),rpid))

print("父子进程都可以执行这里的代码")

运行结果:
我是父进程(19360),我的子进程是(19361)
父子进程都可以执行这里的代码
我是子进程(19361),我的父进程是(19360)
父子进程都可以执行这里的代码

multprocessing

如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择。由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序?

由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。

#coding=utf-8
from multiprocessing import Process
import os

# 子进程要执行的代码
def run_proc(name):
    print('子进程运行中,name= %s ,pid=%d...' % (name, os.getpid()))

if __name__=='__main__':
    print('父进程 %d.' % os.getpid())
    p = Process(target=run_proc, args=('test',))
    print('子进程将要执行')
    p.start()
    p.join()
    print('子进程已结束')

多进程能否修改全局变量

import multiprocessing

mylist = list()


def work1():
    mylist.append(1)
    print("子进程1中的列表为", mylist)


def work2():
    mylist.append(2)
    print("子进程2中的列表为", mylist)


if __name__ == '__main__':
    p1 = multiprocessing.Process(target=work1)
    p2 = multiprocessing.Process(target=work2)

    p1.start()
    p1.join()
    p2.start()
    p2.join()

    print('主进程的列表为', mylist)

运行结果:
这里写图片描述

多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值