Pitón de combate: Uso pitón multi-threading

Piedras de otros cerros, pueden aprender ------ "El Libro de los Cantares Xiaoya Heming"

I. Introducción

Si todo el mundo en el hilo de lo que es, ¿cuál es el proceso todavía tienen dudas, por favor, la búsqueda de Google, esta es la descripción que ya no es redundante de estos conceptos, este estudio trata de resumir pitón múltiples hilos de varias maneras.

hilo común python3 en dos módulos:

  • _hilo
  • enhebrado (recomendado)

módulo de hilo ha sido abandonado. El usuario puede utilizar en lugar del módulo de roscar. Por lo tanto, ya no se puede utilizar el módulo de "hilo" en python3 en. Por compatibilidad, python3 de cambio de nombre del hilo "_thread".

Aquí hay tres maneras de implementar múltiples hilos utilizando casos reales.

Dos, Python multi-hilo

1. _thread multi-hilo

hilos de Python utilizan de dos maneras: con una función o para envolver la clase de objeto de rosca.
Funcional: la función de llamada _thread módulo start_new_thread () para generar un nuevo hilo. La sintaxis es la siguiente:

_thread.start_new_thread ( function, args[, kwargs] )

parámetros:

  • función - Función de hilo.
  • args - argumentos enviados a la función del hilo, que debe ser un tipo tupla.
  • kwargs - opcionales.

Nota: El proceso de _thread cuándo salir sin ningún control. Cuando el hilo principal, todos los otros hilos también han terminado por la fuerza. No va a emitir una advertencia o limpieza adecuada. Por lo tanto pitón multithreading generalmente utilizar el módulo de roscado más avanzado, que proporciona mecanismos de control completo de hilos y el mecanismo de semáforos.

caso:

# -*- coding: utf-8 -*-
import _thread
import time


def print_time(thread_name, sleep_time):
    for i in range(5):
        time.sleep(sleep_time)
        print("threadName: %s, time is %s" % (thread_name, time.ctime(time.time())))


if __name__ == "__main__":
    try:
        _thread.start_new_thread(print_time, ("thread-1", 2))
        _thread.start_new_thread(print_time, ("thread-2", 2))
    except:
        print("线程为启动")

while 1:
    pass

2. Crear un multi-hilo a través threading.Thread

python3.x crear un nuevo hilo por el módulo roscado tiene dos maneras: una es por threading.Thread (Target = ejecutable Método) - decir pasado a un método ejecutable del objeto Thread (o los objetos);

# -*- coding: utf-8 -*-
import time
import threading


def print_time():
    for i in range(5):
        time.sleep(1)
        print("threadName: %s, time is %s" % (threading.current_thread().getName(),
                                              time.ctime(time.time())))


if __name__ == "__main__":
    t = threading.Thread(target=print_time)
    t2 = threading.Thread(target=print_time)
    t.start()
    t2.start()
    t.join() # join是阻塞当前线程(此处的当前线程时主线程) 主线程直到Thread-1结束之后才结束
    print("主线程打印内容")

3. Crear multi-hilo a través de la herencia threading.Thread definido subclase

Podemos crear directamente heredado de threading.Thread una nueva sub-clase, y después del inicio de la llamada instantiate () para iniciar un nuevo tema, que se llama al método de ejecución de la rosca ():

# -*- coding: utf-8 -*-

import threading
import time

exitFlag = 0


class myThread(threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter

    def run(self):
        print("开始线程:" + self.name)
        print_time(self.name, self.counter, 5)
        print("退出线程:" + self.name)


def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            threadName.exit()
        time.sleep(delay)
        print("%s: %s" % (threadName, time.ctime(time.time())))
        counter -= 1


if __name__ == "__main__":
    # 创建新线程
    thread1 = myThread(1, "Thread-1", 1)
    thread2 = myThread(2, "Thread-2", 2)

    # 开启新线程
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    print("退出主线程")
Se han publicado 19 artículos originales · ganado elogios 67 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/m1090760001/article/details/103467195
Recomendado
Clasificación