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

时间:2016-08-06 10:18:33

标签: python multiprocessing

这是一个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执行此操作的正确方法是什么?

1 个答案:

答案 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