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

标签 python multiprocessing

这是一个菜鸟问题,我从来没有用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/

相关文章:

python - 多处理进程是否必须在调用的函数结束时终止?

java - 多个套接字导致 ConnectException : Connection refused: connect

python - 就地替换python中列表中所有出现的元素

python - Django 虚拟环境布局

python - 指定刻度标签的浮点格式

python - Python 和 PySide 中带超时的线程上传

c# - 机器中的多任务与多进程

python - 如何根据 Python 中的条件停止播放音频?

python - 安装pyaudio时,pip在/usr/local/include中找不到portaudio.h

python - 在 NetworkX 图表中打印权重时出现问题