2011-06-12 50 views
12

Me gustó la capacidad de convertir una función en un hilo sin la línea innecesaria para definir una clase. Sé acerca de _thread, sin embargo, parece que no debes usar _thread. ¿Existe un equivalente de buenas prácticas de thread.start_new_thread para python 3?¿Qué pasó con thread.start_new_thread en python 3

Respuesta

21
threading.Thread(target=some_callable_function).start() 

o si desea pasar argumentos,

threading.Thread(target=some_callable_function, 
     args=(tuple, of, args), 
     kwargs={'dict': 'of', 'keyword': 'args'}, 
    ).start() 
+0

Estoy usando el método 2 para pasar un argumento a un hilo, y estoy obteniendo el error: el argumento después de * debe ser una secuencia, no lo es. ¿Sabes qué significa esto? – lemiant

+4

Asegúrese de estar pasando '(firstarg,)' not '(firstarg)' - recuerde que las tuplas de un solo elemento necesitan que la coma final se interprete como una tupla. – Amber

+0

¿Cómo sería la firma del método invocable? Si uso algo como 'invocable (** kwargs):' obtengo 'TypeError: callable() toma 0 argumentos posicionales pero 1 fue dado', y si uso' invocable (kwargs): 'obtengo' TypeError: callable () obtuvo un argumento de palabra clave inesperado 'raw''. – henrikstroem

3

Desafortunadamente no hay un equivalente directo, porque Python 3 está destinado a ser más portátil que Python 2 y la interfaz _thread es visto como demasiado bajo nivel para este propósito.

En Python 3 la mejor práctica es generalmente usar threading.Thread(target=f...). Esto utiliza una semántica diferente, pero se prefiere porque la interfaz es más fácil de portar a otras implementaciones de Python.

Cuestiones relacionadas