使用Python编写多线程应用的10个函数
在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个多线程函数,使用这些函数可以更加方便地编写多线程应用。
