作为探索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')
请加油,
问候 AdrianMonk
答案 0 :(得分:0)
这看起来像是使用内存映射文件的一个简洁案例。
当一个进程内存映射一个文件(比如说F)并且另一个进程出现并映射同一个文件(即也映射到F.fileno())时,完全相同的内存块被映射到第二个进程的地址空间。这允许两个进程通过写入共享存储器来非常快速地交换信息。 。
当然,您必须在映射中管理正确的访问(读取,写入等),然后只需在文件中正确轮询/写入正确的位置以满足应用程序的逻辑 (见http://docs.python.org/2/library/mmap.html)。
答案 1 :(得分:0)
来自multiprocessing
的沟通渠道Pipe or Queue旨在解决此类问题