首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过process1倾倒数据并按进程2加载所需数量的

通过process1倾倒数据并按进程2加载所需数量的
EN

Stack Overflow用户
提问于 2022-10-06 09:26:05
回答 1查看 75关注 0票数 1

我想引起你的注意,因为我是新的多处理编码。

下面是我必须使用多处理模块在不同内核上运行的两个进程的问题

第一项任务是逐行从传感器收集数据,并将其附加到内存(数据结构:python列表),它是一个串行连接(一个接一个地给出数据),为此我已经有了一个工作代码,但由于我必须为此收集数据,直到传感器被连接到无限时间,直到代码运行为止。

第二个过程是从上述数据结构中收集前140个数据,并在第二个进程函数中打印其他任务,br> pseduo代码如下所示

代码语言:javascript
复制
Buffer=[] #global list
def process1():
   Obj=port.open()
   a=read_data(Obj)
   Buffer.append(a)
   port.close()
retunrn Buffer

def process2(Buffer):
    print('hello from process2')
    if len(Buffer)>=140:
        print(Buffer)
        #do some task
    else:
        print(Buffer)

def interprocesscommunication()
   import multiprocessing
   while(True):
      p1=multiprocessing.Process(target=process1)
      p2=multiprocessing.Process(target=process2,args=(Buffer))
      p1.run()
      p2.run()

任何人都有更好的方案来在不同的核心上并行地运行这两个进程。

注意:我也很怀疑这两个进程能否共享内存,如果不是如何?

EN

回答 1

Stack Overflow用户

发布于 2022-10-06 09:34:36

进程不能以这种方式共享内存。你必须以某种方式同步状态。最常见的方法是使用multiprocessing.Pipe()

另外,请看一下这个示例:

代码语言:javascript
复制
# example of using a duplex pipe between processes
from time import sleep
from random import random
from multiprocessing import Process
from multiprocessing import Pipe
 
# generate and send a value
def generate_send(connection, value):
    # generate value
    new_value = random()
    # block
    sleep(new_value)
    # update value
    value = value + new_value
    # report
    print(f'>sending {value}', flush=True)
    # send value
    connection.send(value)
 
# ping pong between processes
def pingpong(connection, send_first):
    print('Process Running', flush=True)
    # check if this process should seed the process
    if send_first:
        generate_send(connection, 0)
    # run until limit reached
    while True:
        # read a value
        value = connection.recv()
        # report
        print(f'>received {value}', flush=True)
        # send the value back
        generate_send(connection, value)
        # check for stop
        if value > 10:
            break
    print('Process Done', flush=True)
 
# entry point
if __name__ == '__main__':
    # create the pipe
    conn1, conn2 = Pipe(duplex=True)
    # create players
    player1 = Process(target=pingpong, args=(conn1,True))
    player2 = Process(target=pingpong, args=(conn2,False))
    # start players
    player1.start()
    player2.start()
    # wait for players to finish
    player1.join()
    player2.join()

来源:Python中的多处理管道

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73971489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档