Python在多处理进程之间共享双端队列

肯尼斯·布鲁格曼斯

我一直在看以下运气不好的问题:

Python在并行进程之间共享字典

多处理:在进程之间共享一个大型只读对象?

python中的多处理-在多个进程之间共享大对象(例如pandas数据框)

我编写了一个非常基本的测试文件来说明我要尝试执行的操作:

from collections import deque
from multiprocessing import Process
import numpy as np


class TestClass:
    def __init__(self):
        self.mem = deque(maxlen=4)
        self.process = Process(target=self.run)

    def run(self):
        while True:
            self.mem.append(np.array([0, 1, 2, 3, 4]))


def print_values(x):
    while True:
        print(x)


test = TestClass()
process = Process(target=print_values(test.mem))

test.process.start()
process.start()

当前,它输出以下内容:

deque([], maxlen=4)

如何从主代码或运行“ print_values”的进程访问mem值?

肯尼斯·布鲁格曼斯

因此,通过结合@ bivouac0提供的代码和@Marijn Pieters发表的评论,我想到了以下解决方案:

from multiprocessing import Process, Manager, Queue


class testClass:
    def __init__(self, maxlen=4):
        self.mem = Queue(maxsize=maxlen)
        self.process = Process(target=self.run)

    def run(self):
        i = 0

        while True:
            self.mem.empty()
            while not self.mem.full():
                self.mem.put(i)
                i += 1


def print_values(queue):
    while True:
        values = queue.get()
        print(values)


if __name__ == "__main__":
    test = testClass()
    print_process = Process(target=print_values, args=(test.mem,))

    test.process.start()
    print_process.start()

    test.process.join()
    print_process.join()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章