Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: EvilGoblin en 8 Julio 2010, 18:30 pm



Título: [PYTHON] Hilos
Publicado por: EvilGoblin en 8 Julio 2010, 18:30 pm
Estoy "practicando" hilos en Python para ganar velocidad en algunas actividades

entonces me doy cuenta que no pueden acceder al mismo recurso los 2 hilos al a vez (cosa que no pasa en C++)

ejemplo:

Código:
import time
from threading import Thread

id = 1
class Hilo( Thread ):

def __init__( self, num, nom ):

Thread.__init__(self)
self.dato = num
self.nombre = nom

def run( self ):
for l in range( 10 ):
print( self.nombre + " ID " + str( id ) )
id = id + 1
def test():
hilo1 = Hilo( 1, "Hilo 1" )
hilo2 = Hilo( 2, "Hilo 2" )
hilo2.start()
hilo1.start()
hilo1.join()
hilo2.join()

if __name__ == "__main__":
test()


Me da error al acceder al ID el segundo hilo

entonces queria consultar que forma tengo de acceder a una variable, que pueda actualizarla desde varios hilos

como agregar cadenas en un array.  



Título: Re: [PYTHON] Hilos
Publicado por: bizco en 8 Julio 2010, 18:44 pm
busca sobre sincronizacion de threads, esto es lo correcto sea el lenguaje que sea.


Título: Re: [PYTHON] Hilos
Publicado por: Novlucker en 8 Julio 2010, 19:10 pm
De aquí  (http://mundogeek.net/archivos/2008/04/18/threads-en-python/)aprendí yo sobre threads :P, vete directo a la parte de "Sincronización" que lo tiene muy bien explicado

Saludos


Título: Re: [PYTHON] Hilos
Publicado por: EvilGoblin en 8 Julio 2010, 19:14 pm
yo justo estaba leyendo
http://chuwiki.chuidiang.org/index.php?title=Hilos_en_python

que tmb explican bien, ahora reviso tu link. asi me queda mas claro

Estaba intentando la sincronizacion, es bastante alboroto xD.. espero q me quede un poco mas en claro

Igual no necesito hacer nada de semaforos, ni nada raro. Ya que van a ser tareas simples, Pero que con varios hilos las hago bastante mas rapido


ya encontre la solucion era usar

Código:
global id
para poder modificarlo desde el hilo =P

Suerte!
y Gracias!


Título: Re: [PYTHON] Hilos
Publicado por: Novlucker en 8 Julio 2010, 19:32 pm
Ok, pero poner una variable global no va a impedir que pueda haber errores si los dos hilos intentan acceder a la misma vez :-\

Las variables globales, son iguales por ejemplo a las static de otros lenguajes, son variables independientes de un objeto, pero solo eso.

En defintiva, para esta función que estas haciendo no hay problemas, pero si pones los hilos a hacer algo más "trabajoso" puede que te de problemas en la sincronización.

Trata con más hilos y más repeticiones en el contador y verás
Código
  1. Hilo 3 ID 272
  2. Hilo 3 ID 273
  3. Hilo 3 ID 274
  4. Hilo 5 ID 275
  5. Hilo 5 ID 276
  6. Hilo 5 ID 277
  7. Hilo 5 ID 278Hilo 4 ID 272
  8. Hilo 4 ID 273
  9. Hilo 4 ID 274
  10. Hilo 4 ID 275Hilo 3 ID 275
  11. Hilo 3 ID 276

Saludos


Título: Re: [PYTHON] Hilos
Publicado por: EvilGoblin en 8 Julio 2010, 20:13 pm
Ok, igual estoy leyendo sobre los semaforos y sincronizacion xD

Mi idea es esto

Si creo un bruteforce para SQL (blind)

poner a crackear 1 x 1 letra por letra. tardaria bastante, mi intencion es usar hilos para poder crackear todas las letras a la vez

asi que solo voy a usar algunos variables para saber si termino y escribir un array asi que no creo que tenga muchos problemas.

Lo hago yo para aprender y tener mas control sobre lo q hago. ^^


Título: Re: [PYTHON] Hilos
Publicado por: Novlucker en 8 Julio 2010, 20:19 pm
Esta bien, yo te lo decía para que lo tengas presente, ya que si no le pones control a los diferentes hilos, "el que entra primero gana", entonces puede que no estes donde crees que estas :P

Sobre tu código, supongo que te refieres a ir generando las "claves" y hacer GET a la web, porque es más rápido hacer GET con muchos hilos, que hacerlo con solo uno :P

Saludos


Título: Re: [PYTHON] Hilos
Publicado por: EvilGoblin en 8 Julio 2010, 20:34 pm
Claro,
son varios los q estoy haciendo

uno que haga un GET otro POST otro User-agent

estoy probando varios ^^, solo para taradear, no saco info. Estoy probando las limitaciones de esta tecnica


Título: Re: [PYTHON] Hilos
Publicado por: Debci en 8 Julio 2010, 21:23 pm
En java sonde esas cosas que son correctas, pero si no lo haces, no se nota en aplicaciones "normales" pero como compliques un poco la historia ocurren cosas extrañas xD

Saludos


Título: Re: [PYTHON] Hilos
Publicado por: hackstyle18 en 14 Julio 2010, 01:27 am
prueba poner esta parte asin:

Código:
        hilo1 = Hilo( 1, "Hilo 1" )
hilo2 = Hilo( 2, "Hilo 2" )
hilo2.start()
hilo2.join()
hilo1.start()


lo que ace el join() es que asta que no termine un thread  en este caso el hilo2, no deja que empieze el hilo1 , asin creo que no te tiene que dar error porke no intentaran acceder los 2 al mismo tiempo ;)

nose si me equivoko o no, yo soy novato en esto tambien ^^

Saludos


Título: Re: [PYTHON] Hilos
Publicado por: EvilGoblin en 14 Julio 2010, 04:04 am
Muchas Gracias!
pero mi intencion es que corran ambos (o todos) los hilos a la vez, y ya lo tengo solucionado =D se agradece ^^


Título: Re: [PYTHON] Hilos
Publicado por: leogtz en 14 Julio 2010, 07:07 am
Muchas Gracias!
pero mi intencion es que corran ambos (o todos) los hilos a la vez, y ya lo tengo solucionado =D se agradece ^^


Si tienes la solución, por favor posteala, a otros usuarios les interesaría.


Título: Re: [PYTHON] Hilos
Publicado por: EvilGoblin en 14 Julio 2010, 22:45 pm
Muchas Gracias!
pero mi intencion es que corran ambos (o todos) los hilos a la vez, y ya lo tengo solucionado =D se agradece ^^


Si tienes la solución, por favor posteala, a otros usuarios les interesaría.

ya la postie arriba, declarar las variables como global para acceder =D

Siempre posteo la solucion y casi siempre pongo (SOLUCIONADO) xD