python入门20进程 线程

1.现代操作系统:
OS X,UNIX,Linux,Windows 等都是支持“多任务”的操作系统

单核CPU:通过操作系统轮流让各个任务交替执行,从CPU的视角看,每个任务都是交替执行的,由于CPU的执行速度非常快,我们感觉就像所有任务都在同时执行一样。

多核CPU:由于任务数量远远多于CPU的核心数量,操作系统会自动把很多任务轮流调度到每个核心上执行。

一个正在执行的任务就是一个进程,比如打开一个浏览器就是启动一个浏览器进程

2.启动进程实现多任务:

from multiprocessing import Process
def func(str):
    while True:
        print("hi hi %s"%(str))
        time.sleep(1.2)
    
if __name__=="__main__":
    print("主进程启动")
    #创建子进程
    #target说明进程执行的任务
    p = Process(target=func,args=(“ ”,))
    #启动进程
    p.start()
    while True:
        print("hello hellio")
        time.sleep(1)
#os.getpid()获取当前进程的ID号
#os.getppid()获取当前进程的父进程的id号

3.父子进程的先后顺序

from multiprocessing import Process
def func():
    print("子进程启动")
    time.sleep(3)
    print("子进程结束")
if __name__=="__main__":
    print("父进程启动")
    p=Process(target=func)
    p.strat()
    print("父进程结束")

程序执行结果:父进程启动
             父进程结束
             子进程启动
             子进程结束

#父进程的结束不能影响子进程,让父进程等子进程结束再执行父进程:
p.join()
       

4.全局变量在多个进程中不能共享

num = 100
def func():
    print("子进程开始")
    global num
    num+=1
    print(num)
    print("子进程结束")
if __name__="__main__":
    print("父进程开始")
    p=Process(target=func)
    p.start()
    p.join()
    print(num)
    print("父进程结束")
    #在创建子进程时对全局变量做了备份,父进程与子进程中的num是两个完全不同的变量

5.启动大量子进程

def func(name):
    print("子进程%d启动--%s"%(name,os.getpid() ))
    start = time.time()
    time.sleep(random.choice([1,2,3]))
    end = time.time()
    print("子进程%d结束--%s--耗时%.2f")%(name,os.getpid(),end-start)

if __name__ =="__main__":
    print("父进程启动")
    #创建多个进程,进程池
    p=Pool(2)
    for i in rang(3):
        #创建进程,放入进程池
        p.apply_async(run,args=(i,))
    #调用join前必须先调用close,调用close后不能再继续添加新的进程
    p.close()
    p.join()
    
    print("父进程结束")
    

    

6.实现文件拷贝

import os 
from multiprocessing import  Pool
#复制文件的方法
def copyFile(rPath,wPath):
    fr = open(rpath,"rb")
    fw = open(wpath,"wb")
    context = fr.read()
    fw.write(context)
    fr.close()
    fw.close()

path="  "
topath="  "
#读取路径下的所有文件
fileList = os.listdir(path)
#启动for循环处理每一个文件
start = time.time()
for fileName in fileList:
    copyFile(os.path.join(path,fileName),os.path.join(topath.fileName))
end = time.time()
print("总耗时%0.2f"%(end-start))


猜你喜欢

转载自blog.csdn.net/qq_35076836/article/details/82990909