Python中两个同时运行函数之间的数据交换

2024-10-03 23:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

作为一个探索新的强大的Python世界的人,我遇到了一个理解我的代码的问题,如果有人能在这方面帮助我,那将是非常好的。你知道吗

为了使我的问题简单化,我举了一个例子。 比方说,我有两个函数,通过多重处理同时运行。一个是永久的数据监听器,另一个打印出它的值。另外,我有一个拥有数据的对象,数据是通过set/get设置的。因此,面临的挑战是,这两个功能如何能够访问数据而不将其放到全局数据库中。我想我对如何在函数间传递对象缺乏理解。你知道吗

注意:这两个函数不需要同步,while只是用于无限循环。它只是如何把数据带过来。你知道吗

这会产生这样的代码(我知道它不起作用,只是为了得到这个想法):

import multiprocessing

#simply a data object
class data(object):
    def __init__(self):
    self.__value = 1

    def set_value(self, value):
        self.__value = value

    def get_value(self):
        return self.__value      

# Data listener
def f1(count):
    zae = 0
    while True:
        zae += 1       
        count.set_value = zae

def f2(count):
    while True:
        print (count.get_value)    

#MainPart
if __name__ == '__main__':
print('start')
count = data()

jobs = []
p1 = multiprocessing.Process(target =f1(count))
p2 = multiprocessing.Process(target =f2(count))
jobs.append(p1)
jobs.append(p2)

p1.start()   
p2.start() 

print ('end')

请照亮我

敬礼 阿德里安莫克


Tags: 数据函数selfdatagetvaluedefcount
2条回答

来自multiprocessing的通信信道Pipe or Queue正是为了解决这类问题而设计的

这看起来是一个使用内存映射文件的好例子。你知道吗

当一个进程内存映射一个文件(比如F)而另一个进程出现并映射同一个文件(即也映射到F.fileno())时,则完全相同的内存块被映射到第二个进程的地址空间。这允许两个进程通过写入共享内存来极为快速地交换信息。你知道吗

当然,您必须管理映射中的正确访问(读、写等),然后只需正确轮询/写入文件中的正确位置,以满足应用程序的逻辑 (见http://docs.python.org/2/library/mmap.html)。你知道吗

相关问题 更多 >