博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多任务--进程 及 进程间通信
阅读量:4561 次
发布时间:2019-06-08

本文共 1701 字,大约阅读时间需要 5 分钟。

程序和进程的区别:

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

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

 

多任务-进程的初体验:

import timeimport multiprocessingdef 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 multiprocessingimport timedef 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("接受完毕")            breakdef 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

共享数据:

关于进程间共享数据

 

转载于:https://www.cnblogs.com/zach0812/p/11413740.html

你可能感兴趣的文章
7.9 练习
查看>>
基于ArcGIS JS API的在线专题地图实现
查看>>
learnByWork
查看>>
Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法
查看>>
lua 函数
查看>>
Git的基本命令
查看>>
四平方和
查看>>
第十八周 12.27-1.2
查看>>
C# IP地址字符串和数值转换
查看>>
TCHAR和CHAR类型的互转
查看>>
常用界面布局
查看>>
C语言—— for 循环
查看>>
IBM lotus9.0测试版即将公测
查看>>
xml常用方法
查看>>
Cube Stacking(并差集深度+结点个数)
查看>>
AndroidStudio3更改包名失败
查看>>
jq 删除数组中的元素
查看>>
添加按键事件处理及事件处理的参数传递
查看>>
js URL中文传参乱码
查看>>
Leetcode 367. Valid Perfect Square
查看>>