python进程返回全局变量b

2024-04-25 19:15:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python打开了更多的进程,通过urlib2检索文件,我只调用函数。你知道吗

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

这是调用process对象的函数

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琰u浴中,在一个回路中,而则开启该过程。你知道吗

在例外情况下,我想附加到一个名为listado2的全局变量,但这不起作用,假设它是未定义的listado2。你知道吗

我解决了这个问题,改变了策略

在salidaèu浴室内创建

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

将一个contador放在流程中,并将新的listado2放到流程中

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

在traer函数中改变这个。你知道吗

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

在外面检查一下这是否有效

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

Tags: targetoutputdirurllib2processglobalprintexcept
1条回答
网友
1楼 · 发布于 2024-04-25 19:15:02

^{} statement只通知解析器该变量不被视为局部变量,但如果不存在新变量,它不会定义新变量。在访问它之前,你仍然需要对它进行初始化。您似乎假设它是一个列表(listado2.append(y)),但在您的代码中,实际上没有任何地方使用列表值初始化它。Python如何知道对一个从未被赋值的变量调用哪个.append()方法?你知道吗

相关问题 更多 >