这是一个noob问题,我从未在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的东西并让它更新一个公共变量,但我的理解是多进程不能共享变量。
使用Python执行此操作的正确方法是什么?
答案 0 :(得分:3)
使用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