Cómo usar python (maya) multithreading

He estado mirando ejemplos de otras personas, pero parece que no logro que funcione correctamente.
Usará un solo núcleo o, básicamente, congelará maya si se le da demasiado para procesar, pero parece que nunca consigo que más de un núcleo funcione a la vez.

Entonces, por ejemplo, esto es algo de lo que me gustaría hacer, en un nivel muy básico. Principalmente, simplemente deje que cada bucle se ejecute simultáneamente en un procesador diferente con los diferentes valores (en este caso, los dos valores utilizarían dos procesadores)

mylist = [50, 100, 23] newvalue = [50,51] for j in range(0, len(newvalue)): exists = False for i in range(0, len(mylist)): #search list if newvalue[j] == mylist[i]: exists = True #add to list if exists == True: mylist.append(mylist) 

¿Sería posible lograr esto? El código real en el que quiero usarlo puede tomar desde unos pocos segundos hasta 10 minutos para cada ciclo, pero en teoría todos podrían ejecutarse a la vez, así que pensé que el multithreading aceleraría las cargas.

Ten en cuenta que todavía soy relativamente nuevo en Python, por lo que un ejemplo sería realmente apreciado.

Saludos 🙂

    Realmente hay dos respuestas diferentes a esto.

    Se supone que los scripts mayas se ejecutan en el subproceso principal de la interfaz de usuario, y hay muchas maneras en que pueden hacer que se tropiece si se ejecuta desde un subproceso separado. Maya incluye un módulo llamado maya.utils que incluye métodos para la evaluación diferida en el hilo principal. Aquí hay un ejemplo simple:

     import maya.cmds as cmds import maya.utils as utils import threading def do_in_main(): utils.executeDeferred (cmds.sphere) for i in range(10): t = threading.Thread(target=do_in_main, args=()) t.start() 

    Eso te permitirá hacer cosas con el ui maya a partir de un hilo separado (hay otro método en utils que permitirá que el hilo que llama también espere una respuesta). Aquí hay un enlace a la documentación de maya en este módulo.

    Sin embargo, esto no te ayuda con el segundo aspecto de la pregunta. Maya python no dividirá el trabajo entre los procesadores: los threading le permitirán crear hilos separados, pero todos comparten el mismo intérprete de Python y el locking global del intérprete significará que terminarán esperándolo en lugar de ejecutarse de forma independiente. .

    No puede usar el módulo de multiprocessing , al menos no AFAIK, ya que genera nuevos mayas en lugar de impulsar la ejecución del script hacia otros procesadores en el Maya en el que se está ejecutando. Aparte de Python, Maya es un progtwig antiguo y no muy orientado a múltiples núcleos en ningún caso. Prueba XSI 🙂

    En cualquier caso, cualquier tema de subprocesamiento en Maya es complicado: si toca la aplicación principal (básicamente, cualquier función de la API o un módulo maya.whatever) sin la ejecución diferida de arriba, es probable que bloquee maya. Úsalo solo si tienes que hacerlo.

    Y, por cierto, no puede utilizar executeDeferred, etc. en modo de proceso por lotes, ya que se implementan utilizando el bucle de la interfaz de usuario principal.