异步与高并发

发布时间 2023-04-22 13:59:15作者: linux星

Python中实现异步和高并发,可以使用asyncio模块、多线程、多进程等方式。

1. asyncio模块

asyncio模块是Python自带的异步IO框架,可以用于实现异步和高并发。以下是使用asyncio模块实现异步和高并发的示例:

import asyncio
import time
async def sleep_task():
    print('Before sleep')
    await asyncio.sleep(5)
    print('After sleep')
async def main():
    tasks = []
    for i in range(10):
        tasks.append(asyncio.create_task(sleep_task()))
    await asyncio.gather(*tasks)
if __name__ == '__main__':
    start = time.time()
    asyncio.run(main())
    print(f'Time elapsed: {time.time() - start}')

以上代码中,我们使用asyncio.create_task()方法创建了10个睡眠任务,并使用asyncio.gather()方法等待这些任务的完成。由于使用了异步方式,所以应用程序不会阻塞,可以同时处理其他请求。

2. 多线程

Python中可以使用多线程的方式来实现高并发。以下是使用多线程实现高并发的示例:

from concurrent.futures import ThreadPoolExecutor
import time
executor = ThreadPoolExecutor(10)
def sleep_task():
    print('Before sleep')
    time.sleep(5)
    print('After sleep')
if __name__ == '__main__':
    start = time.time()
    for i in range(10):
        executor.submit(sleep_task)
    print(f'Time elapsed: {time.time() - start}')

以上代码中,我们使用了ThreadPoolExecutor线程池来启动10个睡眠任务,并使用submit()方法将这些任务提交给线程池。由于使用了线程池,所以应用程序可以同时处理多个请求,提高了并发能力。

3. 多进程

Python中也可以使用多进程的方式来实现高并发。以下是使用多进程实现高并发的示例:

from multiprocessing import Pool
import time
def sleep_task():
    print('Before sleep')
    time.sleep(5)
    print('After sleep')
if __name__ == '__main__':
    start = time.time()
    with Pool(10) as p:
        p.map(sleep_task, range(10))
    print(f'Time elapsed: {time.time() - start}')