猿问

python中正确的进程间共享列表的方式?

题目描述

想在python中写两个子进程,子进程1不间断生成数据(是一个列表),每5秒给传递给子进程2进行数据处理。我使用了multiprocessing.Manager().list()创建了共享的list作为两个子进程的共享变量。但是貌似这样子进程2没有捕捉到这个共享变量,会提示

FileNotFoundError: [WinError 2] 系统找不到指定的文件。

相关代码

我精简了代码,如下:
ps:需要保存为py文件之后在terminal运行。

import multiprocessing as mp
import random
import time

def generater(a,b,tick):#模拟数据采集,这里随机生成一个list,并且将结果赋给另一个变量
    counter=0
    while True:
        time.sleep(1)
        a.append([random.uniform(1,5),random.uniform(1,5),random.uniform(1,5),random.uniform(1,5)])
        counter+=1
        print('generate says',a[:])
        if counter%5==0:
            b.append(a[:])
            tick.value=1#表示printer可以打印了
            for _ in a:
                a.remove(_)
       
def printer(b,tick):#模拟数据操作,这里仅仅打印出来a生成的数据
    while True:
        if tick==1:
            time.sleep(1)
            print('printer says',b[:])
            tick.value=0 
            for _ in b:
                b.remove(_)
        
if __name__=='__main__':
    tick=mp.Value('i',0)
    a=mp.Manager().list()
    b=mp.Manager().list()
    p1=mp.Process(target=generater,args=(a,b,tick))
    p2=mp.Process(target=printer,args=(b,tick))
    p1.start()
    p2.start()

望大神批评指正。谢谢。

扬帆大鱼
浏览 530回答 1
1回答

qq_花开花谢_0

解决方法:p1.join();p2.join().
随时随地看视频慕课网APP

相关分类

Python
我要回答