多任务--进程 及 进程间通信教程
程序和进程的区别:
程序只有一份,进程可以有多个!
进程拥有资源,进程是最小的资源分配单位!
多任务-进程的初体验:
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
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »