码迷,mamicode.com
首页 > 系统相关 > 详细

多任务--进程 及 进程间通信

时间:2019-08-26 19:21:27      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:style   入队   ssi   closed   col   接受   进程间通信   mamicode   play   

程序和进程的区别:

程序只有一份,进程可以有多个!

进程拥有资源,进程是最小的资源分配单位!

 

多任务-进程的初体验:

技术图片
import time
import multiprocessing


def test01():
    while True:
        print("{:=^20}".format(1))
        time.sleep(1)

def test02():
    while True:
        print("{:=^20}".format(2))
        time.sleep(1)

if __name__ == __main__:
    process1 = multiprocessing.Process(target=test01)
    process2 = multiprocessing.Process(target=test02)

    process1.start()
    process2.start()
View Code

 

进程和线程的对比和各自优缺点:

对比:

进程是最小的资源分配单位,线程是最终的执行单位。

线线程不能够独立执行,必须依存在进程中

 

优缺点:

线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。

一般开发中,喜欢用的是多线程!

进程间通信:

其实,socket 就是一种进程间通信的方式!

通过磁盘上的文件也可以实现进程间通信!

 

下面说的是通过队列进行进程间通信

一个进程直接向内存中写数据,另一个进程从内存汇总读数据!(这种方式,既没有用网络,也没用磁盘文件

这个内存的特点是:先进先出,所以叫做通过队列完成进程间通信.

 

通过put向Queue 中放数据 ,通过get 从Queue 中读数据,

  注:当Queue 中满时,put 放不进去(阻塞),当Queue 中空时,get不出来(阻塞)

 

Queue 示意图

技术图片

 

进程间通信:

技术图片
import multiprocessing
import time

def download_from_web(q):
    "模拟从网上下载数据"
    data = list([11,22,33,44])

    #向队列中写入数据
    for temp in data:
        q.put(temp)
    print("{:=^20}".format("下载完成,并以放入队列中"))

def analysis_data(q):
    "模拟数据处理"
    worked_data = list()
    while True:
        print("receiving...")
        time.sleep(2)
        data = q.get()
        worked_data.append(data+1)

        print(worked_data)
        if q.empty():
            print("接受完毕")
            break
def main():
    #1,创建一个队列
    q = multiprocessing.Queue()  #max 根据硬件条件而定

    #2,将队列的引用当做实参传递到两个子进程中
    process1 = multiprocessing.Process(target=download_from_web,args=(q,))
    process2 = multiprocessing.Process(target=analysis_data,args=(q,))

    process1.start()
    process2.start()


if __name__ == __main__:
    main()
通过Queue 实现进程间通信-初体验Demo

 

多任务--进程 及 进程间通信

标签:style   入队   ssi   closed   col   接受   进程间通信   mamicode   play   

原文地址:https://www.cnblogs.com/zach0812/p/11413740.html

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