所以我想从另一个多处理函数开始一个多进程函数中的嵌套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()
内部的嵌套循环不执行。很抱歉,如果答案很明显,我是多处理的新手。
i添加了两条注释(带有print
语句(来突出显示错误。
基本上action=None
在func2()
中,所以这就是为什么。。。
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
(时共享值,您需要对单个设备共享内存使用value
或array
,或者对服务器网络使用Manager
。
这里有一个链接: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 ...)
将参数解析为多进程函数。