Python,在后台运行一个进程,并从主线程获取状态

Python,在后台运行一个进程,并从主线程获取状态,python,multiprocessing,Python,Multiprocessing,这是一个noob问题,我从来没有在Python中做过很多工作。我需要一个主进程运行并执行一些操作,而后台进程执行其他计算并将结果保存到变量中。当主线程需要时,它应该能够读取存储在变量中的最后一个值:之前存储的每个值都会被遗忘。假设后台进程正在计数:我想知道此刻的数字是多少。这是一个伪代码: from multiprocessing import Process, Pipe import os import time def f(queue): a=0 while True:

这是一个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次。 我尝试使用管道和队列,但没有得到最后存储的变量。该输出为1,2,3,4,。。。虽然我想得到10,20,30,。。。(或类似,取决于时间)。这里的问题是,顾名思义,它是一个队列

我在java中要做的是创建一个类似asynctask的东西,并让它更新一个公共变量,但我的理解是多进程不能共享变量

用Python做这件事的正确方法是什么

使用,通过进程之间的共享内存实现:

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