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:
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.
busca sobre sincronizacion de threads, esto es lo correcto sea el lenguaje que sea.
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
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
global id
para poder modificarlo desde el hilo =P
Suerte!
y Gracias!
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
Hilo 3 ID 272
Hilo 3 ID 273
Hilo 3 ID 274
Hilo 5 ID 275
Hilo 5 ID 276
Hilo 5 ID 277
Hilo 5 ID 278Hilo 4 ID 272
Hilo 4 ID 273
Hilo 4 ID 274
Hilo 4 ID 275Hilo 3 ID 275
Hilo 3 ID 276
Saludos
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. ^^
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
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
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
prueba poner esta parte asin:
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
Muchas Gracias!
pero mi intencion es que corran ambos (o todos) los hilos a la vez, y ya lo tengo solucionado =D se agradece ^^
Cita de: 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 ^^
Si tienes la solución, por favor posteala, a otros usuarios les interesaría.
Cita de: Leo Gutiérrez. en 14 Julio 2010, 07:07 AM
Cita de: 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 ^^
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