mutiprocessing

GIL(Global Interpreter Lock) 即全局解释锁,保证了同一时刻只有一个线程在一个CPU上执行字节码,无法将多个线程映射到多个CPU上。
进程:就是一个程序在一个数据集上的一次动态执行过程。一般由程序、数据集、进程控制块三部分组成。我们编写程序用来描述进程要完成那些功能以及如何完成;数据集则是在程序执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。
进程的过程:创建就绪运行阻塞消亡

import os
from multiprocessing import Process
import time
def fun(name):
    print("2 子进程信息: pid=%s ,ppid=%s" % (os.getpid(),os.getppid()))
    print('hello'+name)

def test():
    print('ssss')
if __name__=='__main__':
    print('1 主进程信息:pid=%s,ppid=%s'%(os.getpid(),os.getppid()))
    ps=Process(target=fun,args=('jingsanpang',))
    print('111 ### ps pid :'+str(ps.pid)+',ident:'+str(ps.ident))
    print('3 进程信息:pid=%s,ppid=%s'%(os.getpid(),os.getppid()))
    print(ps.is_alive())
    ps.start()
    print(ps.is_alive())
    print('222 ### ps pid :'+str(ps.pid)+',ident:'+str(ps.ident))
    print('4 进程信息:pid=%s,ppid=%s'%(os.getpid(),os.getppid()))
    ps.join()
    print(ps.is_alive())
    print('5 进程信息:pid=%s,ppid=%s'%(os.getpid(),os.getppid()))
    print(ps.terminate())
    print('6 进程信息:pid=%s,ppid=%s'%(os.getpid(),os.getppid()))

进程池 Pool(多个进程)

import multiprocessing
import time
def work(msg):
    mult_process_name=multiprocessing.current_process().name
    time.sleep(2)
    print('process: '+mult_process_name+'-'+msg)
if __name__=='__main__':
    pool=multiprocessing.Pool(processes=5) #创建5个进程
    for i in range(10):
        msg='process %d'% i
        pool.apply_async(work,(msg,))
    pool.close()   #关闭进程池,表示不能在往进程池中添加进程
    pool.join()     #等待进程池中所有的进程被执行完毕,必须在close()之后调用
    print('Sub-process all done.')

你可能感兴趣的:(python)