[英]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.