1.多线程
threading.Thread
是Python内置的线程模块,用于创建和管理线程。以下是threading.Thread
函数的使用方法:
-
导入
threading
模块:
import threading
-
创建一个新的线程,需要定义一个函数作为线程的执行体,例如:
def my_func(arg1, arg2):
# do something
pass
my_thread = threading.Thread(target=my_func, args=(arg1, arg2))
这里 target
参数是指定执行体函数,args
是传递给执行体函数的参数,这些参数必须以元组形式传递。创建线程后,可以使用 start()
方法启动线程:
my_thread.start()
3.可以使用 join()
方法等待线程完成执行。例如:
my_thread.join()
join()
方法会阻塞当前线程,直到被调用的线程执行完毕。
4.可以使用 is_alive()
方法检查线程是否仍在运行,例如:
if my_thread.is_alive():
print("Thread is still running.")
else:
print("Thread has finished.")
这个方法返回 True
如果线程仍在运行,否则返回 False
。
5.可以使用 name
属性为线程指定一个名称,例如:
my_thread.name = "MyThread"
6.可以使用 daemon
属性将线程设置为守护线程,例如:
my_thread.daemon = True
守护线程是在主线程退出时自动退出的线程,不需要等待线程执行完毕。如果将守护线程设置为 True
,则主线程不会等待该线程执行完毕。
这是 threading.Thread
的基本用法。在使用线程时,请注意线程安全性和锁的使用,以避免线程冲突和数据竞争问题。
2.协程
在Python中,async
是用于创建协程(coroutine)的关键字。协程是一种轻量级的并发编程方式,可以在单线程中实现异步操作,提高程序的性能和响应能力。
async
关键字通常与await
关键字一起使用。await
关键字用于等待一个协程执行完成并返回结果,同时不会阻塞当前线程,让线程可以处理其他任务。
通过使用async
和await
关键字,可以编写异步的、非阻塞式的代码,以提高程序的效率。同时,Python标准库中也提供了许多异步库和工具,如asyncio
模块和aiohttp
库,可以帮助开发者更方便地编写异步程序。
import time
import asyncio
async def fun(n):
# 在真实使用场景中,这里的asyncio.sleep替换成支持协程的方法
await asyncio.sleep(1)
print("{} is done!".format(n))
# 使用协程 1.02s
t1 = time.perf_counter()
loop = asyncio.get_event_loop()
tasks = []
for i in range(1000):
tasks.append(fun(i))
loop.run_until_complete((asyncio.wait(tasks)))
t2 = time.perf_counter()
print(t2 - t1)