Forum » Programiranje » [Python] Numpy.loadtxt pogoj za delovanje?
[Python] Numpy.loadtxt pogoj za delovanje?

BlueWhale ::
V kodi poskušam prebrati veliko količino datotek, pri čemer se s parametrom read=True ali False odločim, ali bom datoteke res brala ali ne (potrebujem obe možnosti). Delam s parallel python. Poglavitni deli kode:
  
Vse dela ok za r = read_data(db, read=True), za read=False pa ne. V tem primeru se zanka ustavi po približno 500 prebranih datotekah, vedno na drugem mestu (okoli 500. fajla). S tem, da se ustavi, mislim na to, da se zdi, kot da potrebuje neskončno časa, da bo prebral naslednjo datoteko.
 
Če za namene testiranja odkomentiram vrstico 9 (self.sp = None), je za read=True vse ok. Zaplete se, če zgornjo vrstico z loadtxt zbrišem. V tem primeru je obnašanje enako, kot če je read=False - ustavi se okoli 500. fajla. Ni nobenih errorjev.
 
Če spremenim kodo v funkciji f:
  
dela vse normalno v vseh primerih.
Zdi se, da če ne uporabim funkcije loadtxt, se nekje ustavi. Če jo uporabim 'kar tako' (test v vrstici 4 v funkciji f), pa dela normalno.
 
Kje bi lahko bil problem? Ali je problem v paralelizaciji?
Hvala!
class Data:
...
     def setData(self, x=False):
         if x:
             self.data = x
         else:
             try:
                 self.data = np.loadtxt(self.path)
#                 self.data = None
             except IOError as e:
                 print 'WARN'
...
def read_data(db, read=True):
    ppservers = ()
    if ncpus:
        job_server = pp.Server(ncpus, ppservers=ppservers)
    else:
        job_server = pp.Server(ppservers=ppservers)
    jobs = [job_server.submit(f, (x, read,), (), ('numpy as np', 'from Data import Data', )) for x in db]
    data = [x() for x in jobs]
    return data
def f(db, read=True):
    x=Data()
    x.setPath(db)
# reading other parameters
    if read:
        x.setData()
    return x
if __name__ == "__main__":
    # db: list of strings, len(db)=1000
...
    r = read_data(db, read=True)
    r2 = read_data(db, read=False)
Vse dela ok za r = read_data(db, read=True), za read=False pa ne. V tem primeru se zanka ustavi po približno 500 prebranih datotekah, vedno na drugem mestu (okoli 500. fajla). S tem, da se ustavi, mislim na to, da se zdi, kot da potrebuje neskončno časa, da bo prebral naslednjo datoteko.
Če za namene testiranja odkomentiram vrstico 9 (self.sp = None), je za read=True vse ok. Zaplete se, če zgornjo vrstico z loadtxt zbrišem. V tem primeru je obnašanje enako, kot če je read=False - ustavi se okoli 500. fajla. Ni nobenih errorjev.
Če spremenim kodo v funkciji f:
    if read:
        x.setData()
    else:
        test=np.loadtxt(x.path) # spremenljivke test kasneje ne uporabim
dela vse normalno v vseh primerih.
Zdi se, da če ne uporabim funkcije loadtxt, se nekje ustavi. Če jo uporabim 'kar tako' (test v vrstici 4 v funkciji f), pa dela normalno.
Kje bi lahko bil problem? Ali je problem v paralelizaciji?
Hvala!
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | KeyloggerOddelek: Programska oprema | 3010 (1737) | Blisk | 
| » | Kako masovno pingat?Oddelek: Programiranje | 10152 (8139) | ragezor | 
| » | Arduino in luči (strani: 1 2 )Oddelek: Elektrotehnika in elektronika | 13090 (10716) | FX6300B | 
| » | [c] Enaki datotekiOddelek: Programiranje | 1150 (1010) | Spura | 
| » | Skripte (strani: 1 2 )Oddelek: Programiranje | 9327 (7190) | Microsoft |