在一个多处理函数中从另一个多处理函数开始 while 循环

Start while loop in one multiprocessing function, from another multiprocessing function

所以我想从另一个多处理函数在一个多处理函数中启动一个嵌套的 while 循环。在一个函数中,我将变量 (action) 更改为 "fn2",而在另一个函数中,有一个嵌套的 while 循环,其条件为 while action == "fn2":.

见代码:

from multiprocessing import Process

running = True
action = None


def func1():
    global action
    if 1+1 == 2:
        action = "fn2"
        print(action)


def func2():
    while running:
        while action == "fn2":
            print("fn2")


if __name__ == '__main__':
    p1 = Process(target=func1)
    p1.start()
    p2 = Process(target=func2)
    p2.start()
    p1.join()
    p2.join()

然而,当我 运行 它时,代码只打印 "fn2" 一次(确认 action 等于 "fn2")。但是 func2() 里面的嵌套循环没有执行。抱歉,如果答案很明显,我是多处理的新手。

我添加了两条注释(带有 print 语句)以突出显示错误。

基本上 action=Nonefunc2() 所以这就是为什么...

from multiprocessing import Process

running = True
action = None


def func1():
    global action
    if 1+1 == 2:
        action = "fn2"
        print(action)


def func2():
    while running:
        print('got here')  # <--- loops infinitly here
        print(action) # <--- this is none
        while action == "fn2":
            print("fn2")


if __name__ == '__main__':
    p1 = Process(target=func1)
    p1.start()
    p2 = Process(target=func2)
    p2.start()
    p1.join()
    p2.join()

为了在称为 Sharing state between processes 的多处理时共享值,您需要对单个设备共享内存使用 valuearray,或者 Manager用于服务器网络。

这是一个link: https://docs.python.org/3/library/multiprocessing.html

基本格式如下:

from multiprocessing import Process, Value, Array

def f(n, a):
    n.value = 3.1415927
    for i in range(len(a)):
        a[i] = -a[i]

if __name__ == '__main__':
    num = Value('d', 0.0)
    arr = Array('i', range(10))

    p = Process(target=f, args=(num, arr))
    p.start()
    p.join()

    print(num.value)
    print(arr[:])

所以在这个问题的情况下,什么变量 action 等同于 n(变量)或 a(列表)等。这可以跨函数共享.

另请注意,可以使用 args 关键字将参数解析为多进程函数:args=(num, arr ...).