在一个多处理函数中从另一个多处理函数开始 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=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
用于服务器网络。
这是一个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 ...)
.
所以我想从另一个多处理函数在一个多处理函数中启动一个嵌套的 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=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
用于服务器网络。
这是一个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 ...)
.