📜  线程 python (1)

📅  最后修改于: 2023-12-03 15:41:14.604000             🧑  作者: Mango

线程以及Python中如何使用线程

什么是线程

在计算机编程领域中,线程(Thread)是指进程内的一个“执行单元”,也称为轻量级进程。每个进程都有自己的一组线程。单个线程的代码执行是不能被中断的,当一个进程有多个线程时,线程间可以并发执行,这就是多线程。

线程有以下几个特点:

  • 轻量级:线程是进程的一部分,非常轻量级,一个进程可以创建多个线程。
  • 共享进程资源:线程共享了进程的内存空间和系统资源,这就意味着线程之间的通信和数据交换非常方便。
  • 独立调度:线程也有独立的调度器,商场CPU资源的分配和调度不由CPU控制,需要操作系统来协调。
Python中如何使用线程

Python是一门高级语言,通过提供丰富的标准库和第三方库,可以方便地使用线程。

Python提供了两个模块来支持多线程:_thread和threading。

使用_thread模块

_thread模块是Python的底层模块,它提供了基本的线程和锁机制。以下是使用_thread模块创建线程的示例代码:

import _thread, time

def print_time(threadName, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print("%s: %s" % (threadName, time.ctime(time.time())))

try:
    _thread.start_new_thread(print_time, ("Thread-1", 1))
    _thread.start_new_thread(print_time, ("Thread-2", 2))
except:
    print("Error: unable to start thread")

while 1:
    pass

代码解释:

  • _thread.start_new_thread(target, args[, kwargs]):target是线程要执行的函数,args是传递给函数的参数,注意args是一个元组类型;kwargs是可选的,是传递给函数的关键字参数,类型是字典。
  • time.sleep():线程休眠,单位是秒。
使用threading模块

threading模块是Python的高级模块,提供了更丰富的线程管理方法,它是对_thread模块的封装。以下是使用threading模块创建线程的示例代码:

import threading, time

class MyThread(threading.Thread):
    def __init__(self, threadID, name, delay):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.delay = delay

    def run(self):
        print("Starting " + self.name)
        print_time(self.name, self.delay)
        print("Exiting " + self.name)

def print_time(threadName, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print("%s: %s" % (threadName, time.ctime(time.time())))

# 创建新线程
thread1 = MyThread(1, "Thread-1", 1)
thread2 = MyThread(2, "Thread-2", 2)

# 开启线程
thread1.start()
thread2.start()

# 等待线程执行完毕
thread1.join()
thread2.join()

print("Exiting Main Thread")

代码解释:

  • threading.Thread类:需要重写该类的run()方法,在调用start()方法时自动执行run()方法。
  • threading.Thread.start():启动线程。
  • threading.Thread.join():等待该线程执行完毕再继续执行主线程。
总结

线程是一种非常重要的编程技术,在提高程序性能、优化用户体验等方面发挥着至关重要的作用。Python提供了两个模块来支持多线程:_thread和threading,开发人员可以根据需要选择使用哪个模块。