簡體   English   中英

Python,在后台運行一個進程,並從主線程獲取狀態

[英]Python, have a process run in the background and get status from the main thread

這是一個菜鳥問題,我在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 and Queue,但是沒有得到最后存儲的變量。 此輸出是1,2,3,4,...,而我想得到10,20,30,...(或類似,取決於時間)。 這里的問題是,顧名思義,它像一個隊列一樣工作。

我在Java中要做的是創建一個類似於asynctask的東西,並讓它更新一個公共變量,但是我的理解是,多個進程無法共享變量。

用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM