大家好,我正在做一個簡單的Python程式,我需要一個多處理程式來同時啟動兩個函式。以下是該程式的主要程序。
- 創建兩個函式。
- 建立一個全域變數,用于存盤函式的值。
- 使用python中的多處理庫同時啟動兩個函式。
- 第一個函式的作業是在某個時間加載和改變全域變數的值。
- 第二個函式的作業是在全域變數不等于某個值時持續列印特定資料。
""" 輸入時間 import multiprocessing
a = "Wait"。
def test1()。
print("
#######################
功能1")
global a
time.sleep(1)
a = "加載的資料"
print(a)
def test2()。
print("
#######################
函式2")
global a
print(a)
if __name__ == '__main__'/span>:
t1 = multiprocessing.Process(target=test1, args=[] )
t1.start()
time.sleep(2)
t2 = multiprocessing.Process(target=test2, args=[] )
t2.start()
""""
以下代碼的輸出如下:
""""
#######################
函式1
加載的資料
#######################
功能描述 2
等待時間
""""
我面臨的問題是,第一個函式成功執行并列印了a的值,但在第二個函式中卻列印了全域變數的舊值。
我認為我做錯了什么。我需要有人來幫助我。 需要的是:
如何修復或改變全域變數的值。
如何在第二個函式中對全域變數使用回圈(條件)來列印值!=特定值。
請糾正我的代碼并告訴我如何在第二個條件中使用回圈。如果a!="LoadedData",第二個函式連續列印 "加載資料...."。請等待"。否則停止回圈。
也很抱歉,我的英語語言很差,很蹩腳
。uj5u.com熱心網友回復:
在Python中,行程默認是沒有共享記憶體的,盡管有可能做到這一點。引自檔案:
... 當進行并發編程時,通常最好盡可能避免使用共享狀態。當使用多個行程時,這一點尤其正確。
from multiprocessing import Manager, Process
import時間
import ctypes
def test1(a)。
print("
#######################
函式1")
time.sleep(1)
print(a.value)
a.value = "加載的資料"。
def test2(a)。
print("
#######################
功能2")
print(a.value)
if __name__ == ' __main__':
manager = Manager()
a = manager.Value(ctypes.c_wchar_p, "Wait")
t1 = Process(target=test1, args=(a,))
t1.start()
time.sleep(2)
t2 = Process(target=test2, args=(a,))
t2.start()
t1.join()
t2.join()
你得到全域a變數的 "舊 "值的原因是,每個行程都得到它自己的a的副本。第二個行程完全是 Python 解釋器的新實體,對第一個行程一無所知。
我建議你先閱讀docs。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/318361.html
標籤:
