Python多线程和协程

1.多线程

threading.Thread 是Python内置的线程模块,用于创建和管理线程。以下是threading.Thread函数的使用方法:

  1. 导入 threading 模块:

 import threading
  1. 创建一个新的线程,需要定义一个函数作为线程的执行体,例如:

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关键字用于等待一个协程执行完成并返回结果,同时不会阻塞当前线程,让线程可以处理其他任务。

通过使用asyncawait关键字,可以编写异步的、非阻塞式的代码,以提高程序的效率。同时,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)

猜你喜欢

转载自blog.csdn.net/weixin_48144018/article/details/129990518