美文网首页
进程的创建

进程的创建

作者: furuiyang | 来源:发表于2018-04-27 20:46 被阅读0次

进程的创建-multiprocessing

multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。

两个while循环一起执行的代码实现

from multiprocessing import  Process
import time

def run_proc():
    '''子进程要执行的代码'''
    while True:
        print("---2---")
        time.sleep(1)

if __name__ == '__main__':
    p = Process(target=run_proc)
    p.start()
    while True:
        print("---1---")
        time.sleep(1)

代码说明

创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动

进程pid

import multiprocessing
import os
import time

def run_proc():
    # os.getpid() 取得当前进程的id
    # os.getppid() :取得当前进程的父进程的id
    while True:
        time.sleep(1)
        print()
        print("--run_proc--子进程的父进程的id=%d   子进程的id= %d" % (os.getppid(), os.getpid()))

if __name__ == '__main__':
    print("--main--主进程的父进程id=%d   主进程的id= %d" % (os.getppid(), os.getpid()))
    p1 = multiprocessing.Process(target=run_proc)
    p1.start()
进程id.png

Process语法结构如下

Process([group [, target [, name [, args [, kwargs]]]]])

target:如果传递了函数的引用,可以认为这个子进程就执行这里的代码
args:给target指定的函数传递的参数,以元组的方式传递
kwargs:给target指定的函数传递命名参数
name:给进程设定一个名字,可以不设定
group:指定进程组,大多数情况下用不到

Process创建的实例对象的常用方法:

start():启动子进程实例(创建子进程)
is_alive():判断进程子进程是否还在活着
join([timeout]):是否等待子进程执行结束,或等待多少秒

join方法的作用是阻塞,等待子线程结束,join方法有一个参数是timeout,即如果主线程等待timeout,子线程还没有结束,则主线程强制结束子线程。

terminate():不管任务是否完成,立即终止子进程

Process创建的实例对象的常用属性:

name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
pid:当前进程的pid(进程号)

给子进程指定的函数传递参数

# coding:utf-8
from multiprocessing import Process
import os
from time import sleep

def run_proc(name,age,**kwargs):
    for i in range(10):
        print('子进程运行中,name= %s,age=%d ,pid=%d...' % (name, age, os.getpid()))
        print(kwargs)
        sleep(0.2)

if __name__ == '__main__':
    p = Process(target=run_proc,args=('test',18),kwargs={"m":20})
    p.start()
    sleep(1) # 1s之后 立即结束子进程
    p.terminate()
    p.join()

运行结果

进程传参运行结果.png

进程之间不同享全局变量

# coding:utf-8
from multiprocessing import Process
import os
import time

nums = [11,22]

def work1():
    print('in process1 pid=%d,nums=%s' %(os.getpid(),nums))
    for i in range(3):
        nums.append(i)
        time.sleep(1)
        print('in process1 pid=%d,nums=%s' %(os.getpid(),nums))

def work2():
    print('in process2 pid=%d,nums=%s'%(os.getpid(),nums))
    
if __name__ == '__main__':
    p1 = Process(target=work1)
    p1.start()
    p1.join()

    p2 = Process(target=work2)
    p2.start()

运行结果:

/home/python/.virtualenvs/django_py3/bin/python /home/python/Desktop/demo/process_demo/demo004.py
in process1 pid=15096,nums=[11, 22]
in process1 pid=15096,nums=[11, 22, 0]
in process1 pid=15096,nums=[11, 22, 0, 1]
in process1 pid=15096,nums=[11, 22, 0, 1, 2]
in process2 pid=15102,nums=[11, 22]

Process finished with exit code 0

相关文章

  • 进程操作

    一、进程创建 进程树 父进程创建若干子进程,子进程再创建其子进程,依次类推,构成进程树。进程的调度,其实就是在进程...

  • 操作系统:进程状态

    进程的创建 允许一个进程创建另一个进程,此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的...

  • 进程产生

    用系统调用创建进程 先创建一个文件process.c,封装通用的创建进程逻辑。 fork创建子进程,父进程和子进程...

  • 进程

    创建子进程 循环创建N个子进程 回收子进程 守护进程

  • Python - 多任务

    一、进程 1、multiprocessing.Process创建进程 2、使用Pool进程池创建进程 3、进程间的...

  • python基础篇大合集,进程、装饰器、列表详解篇!

    进程以及状态 1. 进程 2. 进程的状态 进程的创建-multiprocessing 1. 创建进程 2. 进程...

  • 进程api与控制

    进程创建 进程创建示例代码: 代码示例 用父进程创建N个子进程: 进程共享 父子进程之间在fork后。有哪些相同,...

  • 进程管理(一)进程操作

    进程创建 、进程执行映像和加载、进程运行(进程调度)、进程间的互斥与同步、进程间通信、进程终止 1、进程创建 PC...

  • 进程内核栈、用户栈

    1.1. 进程的堆栈 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会...

  • Linux内核简述

    进程 创建 创建进程用fork()函数。fork()为子进程创建新的地址空间并且拷贝页表。子进程的虚拟地址空间...

网友评论

      本文标题:进程的创建

      本文链接:https://www.haomeiwen.com/subject/blvilftx.html