欢迎访问宙启技术站
智能推送

使用Python编写多线程应用的10个函数

发布时间:2023-06-14 16:32:28

在Python中,多线程应用是非常重要的。它可以提高程序的运行效率,让程序更加响应快速。在这里,我们将介绍10个常用的Python多线程函数,帮助你更加高效地编写多线程应用。

1. threading.Thread(target=None,args=(),kwargs={},daemon=False)

该函数创建一个新的线程对象,可以将任何可调用的对象作为线程的目标函数进行指定。args和kwargs是目标函数的参数传递,daemon参数用于设置子线程是否为守护线程。例如,以下代码创建一个新线程对象并启动:

import threading
import time

#定义线程函数
def thread_func(name):
    for i in range(3):
        print('Thread %s: %d' % (name, i))
        time.sleep(1)

#创建线程对象
t = threading.Thread(target=thread_func, args=('test',))

#启动线程
t.start()

2. threading.active_count()

该函数返回当前活动的线程数。例如:

import threading

#创建线程对象
t1 = threading.Thread()
t2 = threading.Thread()
t3 = threading.Thread()

#启动线程
t1.start()
t2.start()
t3.start()

#输出当前活动的线程数
print(threading.active_count())

输出结果为3,即当前共有3个线程在运行。

3. threading.current_thread()

该函数返回当前执行的线程对象。例如:

import threading

#创建线程对象
t = threading.Thread()

#启动线程
t.start()

#输出当前执行的线程对象
print(threading.current_thread())

输出结果为<Thread(Thread-1, started 123145067646976)>,其中Thread-1是线程对象的名称。

4. threading.enumerate()

该函数返回当前所有活动的线程列表。例如:

import threading
import time

#定义线程函数
def thread_func(name):
    for i in range(3):
        print('Thread %s: %d' % (name, i))
        time.sleep(1)

#创建线程对象
t1 = threading.Thread(target=thread_func, args=('test1',))
t2 = threading.Thread(target=thread_func, args=('test2',))

#启动线程
t1.start()
t2.start()

#输出当前活动的线程列表
print(threading.enumerate())

输出结果为[<Thread(Thread-1, started 123145067646976)>, <Thread(Thread-2, started 123145074939392)>, <_MainThread(MainThread, started 123144911013888)>],其中MainThread是主线程对象。

5. threading.main_thread()

该函数返回主线程对象。例如:

import threading

#输出主线程对象
print(threading.main_thread())

输出结果为<_MainThread(MainThread, started 123144911013888)>。

6. threading.Lock()

该函数创建一个锁对象,用于同步多线程访问共享数据。例如:

import threading

#创建锁对象
lock = threading.Lock()

#使用锁对象同步访问共享数据
with lock:
    print('Critical section')

7. threading.RLock()

该函数创建一把可重入锁对象,用于同步多线程访问共享数据。可重入锁允许同一线程多次获取锁,避免死锁问题。例如:

import threading

#创建可重入锁对象
lock = threading.RLock()

#使用锁对象同步访问共享数据
with lock:
    with lock:
        print('Critical section')

8. threading.Event()

该函数创建一个事件对象,用于多个线程之间的同步。一个线程通过调用事件对象的wait()方法等待一个事件的发生,另一个线程通过调用事件对象的set()方法触发事件。例如:

import threading

#创建事件对象
event = threading.Event()

#等待事件的发生
event.wait()

#触发事件
event.set()

9. threading.Condition()

该函数创建一个条件变量对象,用于多个线程之间的同步。条件变量可以让多个线程等待某个条件的发生。例如:

import threading
import time

#定义共享数据
data = []

#创建条件变量对象
cond = threading.Condition()

#定义等待数据添加的线程函数
def producer():
    global data
    while True:
        with cond:
            #等待数据空闲
            while len(data) > 0:
                cond.wait()
            #添加数据
            data.append(1)
            #通知其他线程
            cond.notify_all()

#定义等待数据消费的线程函数
def consumer():
    global data
    while True:
        with cond:
            #等待有数据
            while len(data) == 0:
                cond.wait()
            #消费数据
            data.pop()
            #通知其他线程
            cond.notify_all()

#创建线程对象
t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)

#启动线程
t1.start()
t2.start()

#等待线程执行完成
t1.join()
t2.join()

10. threading.Timer()

该函数创建一个定时器对象,用于定时执行某个函数。例如:

import threading

#定义定时器执行的函数
def timer_func():
    print('Timer expired')

#创建定时器对象
timer = threading.Timer(5.0, timer_func)

#开始计时
timer.start()

以上就是Python中常用的10个多线程函数,使用这些函数可以更加方便地编写多线程应用。