繁体   English   中英

如何在使用多处理时动态更改函数中变量的值

[英]How to dynamically change the value of variable in functions while using multiprocessing

我如何动态更改 lis 的值,以便每秒 output 一个列表,其中最后一个元素是前一个列表最后一个元素的 2 倍。

import time, multiprocessing

lis = [1, 2, 4]

def printer():
    while True:
        print(lis)
        time.sleep(1)

def updater():
    while True:
        time.sleep(1)
        lis.append(lis[-1]*2)

if __name__ == '__main__':
    process1 = multiprocessing.Process(target=updater)
    process2 = multiprocessing.Process(target=printer)

    process1.start()
    process2.start()

    process1.join()
    process2.join()

我需要 output 是这样的

[1, 2, 4]
[1, 2, 4, 8]
[1, 2, 4. 8. 16]
[1, 2, 4, 8, 16, 32] 
.
.

但现在 output 是

[1, 2, 4]
[1, 2, 4]
[1, 2, 4]
[1, 2, 4] 
.
.

我尝试使用global lis ,但也没有用。

您可以使用multiprocessing.Manager实现所需的行为。

管理器提供了一种创建可以在不同进程之间共享的数据的方法。 您可以在此处阅读更多相关信息。

基于服务器进程部分的示例,您可以像这样重写代码:

import time, multiprocessing


def printer(_lis):
    while True:
        print(_lis)
        time.sleep(1)

def updater(_lis):
    while True:
        time.sleep(1)
        _lis.append(_lis[-1]*2)

if __name__ == '__main__':
    with multiprocessing.Manager() as manager:
        lis = manager.list([1, 2, 4])
        process1 = multiprocessing.Process(target=updater, args=(lis,))
        process2 = multiprocessing.Process(target=printer, args=(lis,))

        process1.start()
        process2.start()

        process1.join()
        process2.join()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM