0

作为探索 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')

请启发我,

问候阿德里安蒙克

4

2 回答 2

0

这看起来像是使用内存映射文件的一个很好的案例。

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

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

于 2013-05-23T19:12:10.283 回答
0

通信通道Pipe 或 Queuemultiprocessing设计正是为了解决这类问题

于 2013-05-23T19:57:14.637 回答