码迷,mamicode.com
首页 > 编程语言 > 详细

python基础学习3

时间:2018-07-30 13:22:18      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:%s   基础   元组   创建   返回   执行顺序   ali   code   proc   

多任务:

frok():只能在linux下执行

 

import os
import time

#在程序运行时,父进程的ID就已经生成完毕了
print(当前进程是父进程,id是:%s%os.getpid())

ret = os.fork()   #创建一个子进程
#ret的值在父进程中是子进程的ID,在子进程中则返回0
print(ret的值是%s%ret)

print(**50)

if ret == 0:        #ret值为0,是子进程
    print(这是一个子进程:%s,他的父进程是:%s%(os.getpid(),os.getppid()))
    time.sleep(1)

#os.getpid()是返回当前进程id,os.getppid()是返回当前进程的父进程id

elif ret > 0:          #ret值大于0,是在父进程中
    print(这是父进程:%s,子进程的值是:%s%(os.getpid(),ret))
    time.sleep(1)
else:
    print(进程创建失败)
    time.sleep(1)

 

如果主进程退出,整个进程就直接退出了,不会因为子进程没执行完而等待子进程结束后才结束整个进程

子进程中修改的全局变量不会影响到父进程的全局变量,多进程中,数据不共享,如果想共享进程中的数据,需要进程间通信


 多次fork()的结果:

技术分享图片


 

父进程,子进程执行顺序没有规律,完全看操作系统的调度代码

 


multiprocessing 在windows上也能用的多进程模块,他提供了一个Process类来代表一个进程对象,这样就能实现跨平台开发了

fork()创建的子进程,如果主进程退出,就所有进程退出

Process类创建的子进程,主进程退出后还会继续执行

from multiprocessing import Process
import os
import time

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

if __name__ == __main__:
    print(父进程%d%os.getpid())

    #创建一个Process的实例对象,一个实例对象就是一个子进程
    p = Process(target=run_proc,args=(test,)) #传入的是元组,如果只有一个值,要在结尾加逗号
                    #target后面放的是子进程要运行的函数
                    #args放的是target里函数需要的参数
    
    print(子进程开始执行)
    p.start()   #开始执行子进程
    p.join()    #等待子进程结束后才继续执行后面的函数,通常用于进程同步
    print(子进程结束执行)

实例练习:

 

from multiprocessing import Process
import os
import time

#将子进程要执行的代码放入函数中
def run_proc(name,age,**kwargs):
    for i in range(10):
        print(子进程运行中,name = %s,age=%d,pid = %d...%(name,age,os.getpid()))
        print(kwargs)
        time.sleep(1)
    print(子进程结束)


if __name__ == __main__:
    p = Process(target=run_proc,args=(test,18),kwargs={tom:alice})
    print(子进程将要执行)
    p.start()
    
    time.sleep(1)
    p.terminate()    #杀死子进程
    
    p.join()
    print(‘父进程结束)

 

发现子进程就运行了一秒后就被强行结束了,结束后执行输出父进程结束,如果没有调用terminate()的话,会等到子进程循环完才结束


实例练习2:

from multiprocessing import Process
import os
import time

def work_1(interval):
    print(work_1父进程(%s),当前进程(%s)%(os.getppid(),os.getpid()))
    
    t_start = time.time()  #取当前的时间戳
    time.sleep(interval)
    t_end = time.time()
    print(work_1 执行时间为%.2f秒%(t_end-t_start))
    print(work_1结束)


def work_2(interval):
    print(work_2父进程(%s),当前进程(%s)%(os.getppid(),os.getpid()))
    
    t_start = time.time()  #取当前的时间戳
    time.sleep(interval)
    t_end = time.time()
    print(work_2 执行时间为%.2f秒%(t_end-t_start))
    print(work_2结束)

if __name__ == __main__:
    print(当前程序ID(父进程):%s%os.getpid())
    
    p1 = Process(target=work_1,args=(2,))
    p2 = Process(target=work_2,name=dd,args=(3,))
    #name参数是给进程取个进程名,没有调用的话程序会默认生成Process-x的程序名

    p1.start()
    p2.start()

    print(p1.name=%s%p1.name)
    print(p1.pid=%d%p1.pid)
    print(p2.name=%s%p2.name)
    print(p2.pid=%d%p2.pid)

    print(主进程结束)

 

 

 

python基础学习3

标签:%s   基础   元组   创建   返回   执行顺序   ali   code   proc   

原文地址:https://www.cnblogs.com/GetAlice/p/9389861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!