es esta la forma correcta de hacer.soy un novato en python

class main(threading.Thread):
    queueLock = threading.Lock()
    EppQueue = Queue.Queue(1)
    CrQueue = Queue.Queue(1)
    EPP = threading.Thread(name='EPP', target=EPP, args=(0,EppQueue,))
    cr = threading.Thread(name='cr', target=CR, args=(0,CrQueue,))
    EPP.setDaemon(True)
    EPP.start()
    Cr.start()
    self.send_queue("EppQueue","sss")
    self.send_queue("CrQueue","ssds")

    def send_queue(self,queuename,qvalue,b=None):
        if b is None:
            b = self.queuename
        self.queueLock.acquire()
        self.b.put(qvalue)
        self.queueLock.release()

cuando ejecuto este llego NameError: name ‘yo’ no está definido ???

Por favor arreglar la sangría, no se puede leer de otra manera.
Que el código no se ejecuta como esta!!!
Me fijo su sangría de la única manera posible de pensar que eso significaba.
mi respuesta fue de utilidad..??..Si sí, entonces por favor upvote y aceptar..!!
También, aunque no fue su pregunta, no es necesario un extra de bloqueo desde Queue es thread-safe.

OriginalEl autor Ragav | 2012-03-10

3 Comentarios

  1. 7

    La variable self (el primer argumento a un método de clase – se puede utilizar cualquier nombre para él) se refiere a una clase instancia (también llamado un objeto). Utilice auto donde el auto no está definida, a la derecha en la clase donde ningún objeto específico es aún conocida.

    Cuando el código queueLock = threading.lock() … etc, es ejecutado usted no está en una clase de objeto (instancia), pero en el contexto de la clase, por lo que su bloqueo será el mismo para todos los objetos de la clase.

    Sobre send_queue, se define y conoce a todos los objetos a través de la clase, por lo que no es necesario utilizar self. para acceder a ella.

    Si quieres un poco de código para ser ejecutado en la creación de la instancia ponerlo en __init__.

    class main(threading.Thread):
      def __init__(self):
        self.queueLock = threading.Lock() 
        .. some code ... 
        send_queue("EppQueue","sss")
        send_queue("CrQueue","ssds")
    +1. También es bueno darse cuenta de que self, mientras que los editores podrían color como una palabra clave, ha ningún significado especial de ningún tipo para el compilador de Python. Es sólo un nombre convencional para el primer argumento de un método de instancia.
    Haters gonna hate… (+1)
    @RikPoggi, «‘\_(*-*)_/'»

    OriginalEl autor Johan Lundberg

  2. 2

    Usted puede utilizar «auto» para una variable de Clase /función..puede utilizar «auto» para una instancia de la Clase…

    Por ejemplo :

    class A():
        x=3
    
    class B():
        def __init__(self):
            self.x=3

    A. x es una variable de clase. B sí mismo.x es una variable de instancia..!!

    También para llamar a una función de Clase..la mejor práctica es hacer una instancia (Objeto) de la Clase y Llamar a la función con ese Objeto..!!

    Como :

    x = main()
    x.send_queue()

    Y para la ejecución de código en «instancia» de la creación, puesto que el código en
    __init__(): función

    OriginalEl autor Ramandeep Singh

  3. 0

    Por favor asegúrese de que la send_queue función es parte de la clase principal. El self es como this puntero en C++ y necesita ser asociado con una clase. El send_queue función debe ser sangría junto con el main clase

    Declaración incorrecta: y debe estar asociado con una clase. Debe ser: y debe estar asociado con una instancia de la clase.

    OriginalEl autor Gangadhar

Dejar respuesta

Please enter your comment!
Please enter your name here