簡體   English   中英

python進程返回全局變量

[英]python Process return global variable

我使用python打開了更多進程以通過urlib2檢索文件,我只將調用放在fucntion上。

t = Process(target=traer, args=(dir, listado[contador],))

這是在過程對象中調用的函數

def traer(dir,y):
    global listado2
    try:
        file = urllib2.urlopen(dir+y)
        nombre=y
        output = open('C:/ndfd/degrib/bin/archivos/'+nombre ,'wb')
        output.write(file.read())
        output.close()
    except urllib2.HTTPError, e:
        print 'HTTPError = ' + str(e.code)
    except urllib2.URLError, e:
        listado2.append(y)
        print 'URLError = ' + str(e.reason)

這是存檔的根

 if __name__ == '__main__':
     global listado
     global listado2
     listado=[]
     listado2=[]
     crear_trip(dir,listado)
     salida_bath(dir,listado,listado2)

salida_bath內部處於循環中,而此過程處於打開狀態。

在例外情況下,我想追加到名為listado2的全局變量,但這不起作用,請說它是未定義的listado2。

我對這個問題的解決辦法,改變策略

在salida_bath內部創建

    manager = Manager()
    listado2 = manager.dict()

將過程的競爭者並通過新的listado2進入過程

    t = Process(target=traer, args=(contador,dir, listado[contador],listado2))

並在交易功能中對此進行更改。

    except urllib2.URLError, e:
        listado2[contador]=y
        print 'URLError = ' + str(e.reason)

在外面檢查這是否有效

 for x in listado2.values():
      listado.append(x)
 print listado

global語句僅通知解析器該變量不被視為局部變量,如果不存在則不定義新變量。 您仍然有責任在訪問它之前在某處對其進行初始化。 您似乎假設它是一個列表( listado2.append(y) ),但實際上在代碼中沒有任何地方使用列表值初始化它。 Python如何知道對從未分配任何內容的變量調用哪個.append()方法?

暫無
暫無

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

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