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