并发:

计算机一个内核处理多个任务,其实就是内核在任务间不停的切换,达到好像多个任务同时在执行,实际上每个时刻只有一个任务在执行

并行:

多个任务利用计算机的多核同时执行,达到并行的效果

 

进程:

进程是程序在计算机种运行,代表是的是程序运行的一个状态

 

进程的状态:

就绪态:进程具备执行条件,等待cpu分配资源

运行态:进程占用cpu时间片

等待态:进程暂停运行,让出时间片

 

相关的进程函数

os.getpid()

os.getppid()

os.exit()

sys.exit()

 

python实现多进程:

——基于fork实现:    windows上不支持。只支持linux和unix系统

注意。如果os.fork()创建子进程成功。那么会将父进程的内存空间和代码复制一份给子进程。所以下例中,a变量和print(os.getpid())语句也带到了子进程中,所以会打印两次print(os.getpid())

import os
from time import  sleep

pid = os.fork() #开启子进程,并将自己的内存空间和代码全部复制给子进程
a = 1       #在当前继承将a=1放到内存空间
print(os.getpid())
if pid < 0:
    #pid<0,进程创建失败
    print('create process failed')
elif pid == 0:
    #子进程走这里
    print('this is new process')
    print('a=',a)
else:
    #父进程走这里
    print('tihs is old process')

 

 

 

 

 

—基于multiprocessing创建进程

from multiprocessing import Process

 

–Process()
功能 : 创建进程对象
参数 : target 绑定要执行的目标函数
args 元组,用于给target函数位置传参
kwargs 字典,给target函数键值传参

'''
multiprocessing创建进程
1.编写进程函数
2.生成进程对象
3.启动进程
4.回收进程
'''

from multiprocessing import Process
from time import sleep
# 有参数的进程函数
def worker(sec,name):
    for i in range(3):
        sleep(sec)
        print("I'm %s"%name)
        print("I'm working...")
# 创建进程对象,通过args 给函数位置传参
p = Process(target=worker,args=(2,),
            kwargs={'name':'Baron'})
#启动子进程
p.start()  #其中2表示,只阻塞2秒,2秒过后,子进程自动结束
#回收子进程
p.join()


 

—如何创建多个子进程

from multiprocessing import Process
from time import sleep
import os
def th1():
    sleep(3)
    print("吃饭")
    print(os.getppid(),'--',os.getpid())
def th2():
    sleep(2)
    print("睡觉")
    print(os.getppid(),'--',os.getpid())
def th3():
    sleep(4)
    print("打豆豆")
    print(os.getppid(),'--',os.getpid())
things = [th1,th2,th3]
jobs = []
for th in things:
    p = Process(target=th)
    jobs.append(p)  # 对进程对象进行存储
    p.start()
# [i.join() for i in jobs]
# 一起回收
for i in jobs:
    i.join()

 

 

–进程池

进程的创建和销毁的过程会消耗的资源较多,如果任务量很多,每个任务又是在很短时间内完成,需要频繁创建进程和销毁,因此消耗大量的计算机资源,所以我们可以创建一定数量的进程来处理事件,事件处理完进 程不退出而是继续处理其他事件,直到所有事件全都处理完毕统一销毁。增加进程的重复利用,降低资源消耗。

 

原文地址:http://www.cnblogs.com/powfu/p/16897825.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性