Python - duda para procesar el mismo fichero en paralelo

   
Vista:

duda para procesar el mismo fichero en paralelo

Publicado por Capi (1 intervención) el 02/08/2016 11:57:40
Buenas, me encuentro programando una función que quiero que procese una serie de archivos en una carpeta.
La cosa es que tarda mucho y entonces voy a llamar a la función varias veces para hacerlo más rápido.
Pero el problema es que si por ejemplo la llamo dos veces, las funciones entran en conflicto porque "pelean" por el mismo archivo, por lo que me da error.

Lo que a mi me gustaría es que la función vea qué esta trabajando con el archivo X y la otra diga "guay, pues me voy a trabajar con el X+1"

adjunto la función.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
def Task2(a,a1):
    condition= bool
 
    for root, dirs, files in os.walk(a + "/" + a1[0]):
        for file in files:
            if file.find("tmp") != -1 or file.find("coded") != -1:#look for files in rec/iq
                #print("find")
                filess=[]
                filess.append(file)
 
                for i in range(len(filess)):
                    temp = (filess[i].split(".")[0]).split("_")
                    print("test", temp)
                #check if in rec/monitor is the block file
                    if os.path.exists(a + "/" + a1[4] + "/" + file.split(".")[0] + "_monitor.npy") \
                        or os.path.exists(a + "/" + a1[4] + "/" + file.split(".")[0] + "_monitor_blocked.npy"):
                            condition=True
                            delete(filess[i],condition,a, a1)
 
 
                    else:
                        condition=False
                        temp = (filess[i+1].split(".")[0]).split("_")
                        print("test", temp)
                        process(temp,condition, a,a1)
                        condition=True
                        delete(file, condition, a,a1)
    return print ("exito")
 
 
def delete(file, condition, a, a1):
    splittingfile = file.split("_")
    if condition==True:
        os.remove(a + path_separator + a1[0] + path_separator + splittingfile[0] + "_" + splittingfile[1])  # remove iq file
        # copy and rename as finisher file
        if os.path.exists(a + "/" + a1[4] + "/" + file.split(".")[0] + "_monitor_blocked.npy") == True:
            shutil.copy(a + "/" + a1[4] + "/" + file.split(".")[0] + "_monitor_blocked.npy",
                (a + "/" + a1[4] + "/" + file.split(".")[0] + "_monitor.npy"))
            # remove _monitor_blocker.npy
            os.remove(a + "/" + a1[4] + "/" + file.split(".")[0] + "_monitor_blocked.npy", )
            #os.remove(a + path_separator + a1[1] + path_separator + temp[0] + "_" + temp[1] + ".npy")
            # remove the sdrmeta data file
    return
 
 
def process(temp, condition, a, a1):
    if condition==False:
        np.save(a + "/" + a1[4] + "/" + temp[0] + "_" + temp[1] + "_monitor_blocked.npy",
                a + "/" + a1[4] + "/" + temp[0] + "_" + temp[1] + "_monitor.npy")
    print("guardado")
    time.sleep(5)
    # test1 = np.memmap(a + path_separator + a1[0] + path_separator + splittingfile[0] + "_" + splittingfile[1])
 
    # satsignal = monitor(a, a1, temp, test1)
    # if len(satsignal[0]) == 0:
    # satsignal = [0, 0]  # really, nooothing was found :(
 
    return
 
 
def folders(folder, subfolders ):
    print("you are using", platform.system(), platform.release(), os.name)
 
    if not os.path.exists(folder):
        os.makedirs(folder)
 
    if os.path.exists(folder):
        for i in range(len(subfolders)):
            if not os.path.exists(folder + path_separator + subfolders[i]):
                os.makedirs(folder + path_separator + subfolders[i])
 
    tiempo_inicial= time.time()
 
    p1= Process(target= Task2, args =(folder, subfolders))
    p2 = Process(target=Task2, args=(folder, subfolders))
 
    p1.start()
 
    p2.start()
 
    p1.join()
    p2.join()
    tiempo_final= time.time ()
    tiempo_ejecucion= tiempo_final - tiempo_inicial
    print(tiempo_ejecucion)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Robert

duda para procesar el mismo fichero en paralelo

Publicado por Robert (2 intervenciones) el 06/08/2016 15:19:09
hola yo una vez hice algo similar en php y tenia el mismo problema que tu y lo resolvi fue primero escaneando el directorio y guardando todo en un array php en python seria un diccionario luego cree una clase que acia el trabajo luego un bucle que recorre el diccionario y le enviba a la clase un directorio a la vez logre que fuera mas rapido ya que solo iva aescanear los sub directorios y no el sistema e ficheros completo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar