这是一个菜鸟问题,我从来没有用Python做过太多事情。我需要运行一个主进程并执行一些操作,而后台进程则执行其他计算并将结果保存到变量中。当主线程需要时,它应该能够读取存储在变量中的最后一个值:之前存储的每个值都被忘记了。假设后台进程正在计数:我想知道此刻它的数字是多少。这是一个虚拟代码:
from multiprocessing import Process, Pipe
import os
import time
def f(queue):
a=0
while True:
a=a+1
child_conn.send(a)
time.sleep(0.1)
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
time.sleep(1)
while True:
print(parent_conn.recv())
time.sleep(1)
所以主线程每秒打印后台线程的变量,每秒更新10次。 我尝试过使用 Pipe 和 Queue,但没有得到最后存储的变量。这个输出是 1,2,3,4,... 而我想得到 10,20,30,... (或类似的,取决于时间)。这里的问题是,顾名思义,它作为队列工作。
我在java中要做的是创建类似asynctask的东西并让它更新公共(public)变量,但我的理解是多进程不能共享变量。
使用 Python 执行此操作的正确方法是什么?
最佳答案
使用multiprocessing.Value ,它是通过进程之间的共享内存实现的:
from multiprocessing import Process, Value
import time
def f(n):
while True:
n.value += 1
time.sleep(0.1)
if __name__ == '__main__':
n = Value('i',0)
p = Process(target=f, args=(n,))
p.start()
while True:
time.sleep(1)
print(n.value)
输出:
7
17
26
35
44
53
关于Python,有一个进程在后台运行并从主线程获取状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38803153/