Python并发concurrent.futures和asyncio实例

yizhihongxing

Python并发编程有多种方式,其中concurrent.futuresasyncio是比较流行的两种方式。本文将介绍如何使用concurrent.futuresasyncio实现并发编程,包括如何使用线程池和进程池,以及如何使用异步编程和协程。

concurrent.futures实例

线程池示例

线程池的使用可以大大减少线程的创建和销毁,提高程序的性能。下面是一个使用线程池的示例,该示例调用了concurrent.futures.ThreadPoolExecutor来创建一个线程池,然后使用submit方法往线程池中提交任务,最后通过as_completed方法获取执行结果。

import concurrent.futures
import time

def worker(num):
    """
    模拟耗时工作
    """
    print(f"start working {num}")
    time.sleep(1)
    print(f"done working {num}")
    return num * num

with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
    # 提交任务
    results = [executor.submit(worker, i) for i in range(5)]
    # 获取执行结果
    for future in concurrent.futures.as_completed(results):
        result = future.result()
        print(f"result: {result}")

输出:

start working 0
start working 1
done working 0
result: 0
start working 2
done working 1
result: 1
start working 3
done working 2
result: 4
start working 4
done working 3
result: 9
done working 4
result: 16

进程池示例

进程池的使用与线程池类似,只需要将ThreadPoolExecutor改为ProcessPoolExecutor即可。下面是一个使用进程池的示例,该示例调用了concurrent.futures.ProcessPoolExecutor来创建一个进程池,然后使用submit方法往进程池中提交任务,最后通过as_completed方法获取执行结果。

import concurrent.futures
import time

def worker(num):
    """
    模拟耗时工作
    """
    print(f"start working {num}")
    time.sleep(1)
    print(f"done working {num}")
    return num * num

with concurrent.futures.ProcessPoolExecutor(max_workers=2) as executor:
    # 提交任务
    results = [executor.submit(worker, i) for i in range(5)]
    # 获取执行结果
    for future in concurrent.futures.as_completed(results):
        result = future.result()
        print(f"result: {result}")

输出:

start working 0
start working 1
done working 0
result: 0
start working 2
start working 3
done working 1
result: 1
done working 2
result: 4
start working 4
done working 3
result: 9
done working 4
result: 16

asyncio实例

异步编程示例

使用asyncio实现异步编程,需要用到asyncawait关键字。下面是一个使用asyncio实现异步编程的示例,该示例定义了一个协程函数count,使用await asyncio.sleep(1)模拟耗时操作,然后通过await asyncio.gather(*tasks)等待多个协程执行完成。

import asyncio
import time

async def count(num):
    """
    模拟耗时操作
    """
    print(f"start working {num}")
    await asyncio.sleep(1)
    print(f"done working {num}")
    return num * num

async def main():
    """
    异步执行任务
    """
    tasks = [count(i) for i in range(5)]

    results = await asyncio.gather(*tasks)

    for result in results:
        print(f"result: {result}")

asyncio.run(main())

输出:

start working 0
start working 1
done working 0
result: 0
start working 2
done working 1
result: 1
start working 3
done working 2
result: 4
start working 4
done working 3
result: 9
done working 4
result: 16

协程示例

协程是一个轻量级的并发编程方式,可以用asyncawait关键字定义。下面是一个使用协程实现异步编程的示例,该示例定义了一个协程函数count,使用await asyncio.sleep(1)模拟耗时操作,然后使用asyncio.create_task方法创建一个任务,并通过await task等待任务执行完成。

import asyncio
import time

async def count(num):
    """
    模拟耗时操作
    """
    print(f"start working {num}")
    await asyncio.sleep(1)
    print(f"done working {num}")
    return num * num

async def main():
    """
    协程执行任务
    """
    tasks = [count(i) for i in range(5)]

    for task in tasks:
        result = await task
        print(f"result: {result}")

asyncio.run(main())

输出:

start working 0
done working 0
result: 0
start working 1
done working 1
result: 1
start working 2
done working 2
result: 4
start working 3
done working 3
result: 9
start working 4
done working 4
result: 16

以上是Python并发编程中concurrent.futuresasyncio的使用示例,可以根据具体场景选择不同的方式来实现并发编程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python并发concurrent.futures和asyncio实例 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • python处理xml文件操作详解

    Python处理XML文件操作详解 介绍 XML(可扩展标记语言)是一种在各种应用程序之间传输数据的常用格式。Python作为一门流行的编程语言,提供了处理XML文件的多种方法。在本文中,我们将介绍Python处理XML文件的详细步骤和示例代码。 步骤 1. 导入必要的库 Python解析XML文件需要使用ElementTree库。需要导入该库,我们可以使用…

    python 2023年6月3日
    00
  • python自动化实现的简单使用

    下面是关于“Python自动化实现的简单使用”的完整攻略: 一、什么是Python自动化? Python自动化是指利用Python语言编写程序进行自动化操作的过程。它可以在无需人工操作的情况下,完成一系列重复或定制化的任务,从而提高个人、组织或企业的工作效率。 二、Python自动化实现的步骤: Python自动化实现的基本步骤如下: 确定任务类型和步骤,明…

    python 2023年5月19日
    00
  • 关于python类SortedList详解

    关于Python类SortedList详解 Python中的SortedList是一个有序列表类,它可以自动维护列表的有序性,同时支持插入删除、查找等操作。本文将详细介Python类SortedList的使用方法和注意事。 安装SortedList 要使用SortedList,我们需要先安装它可以使用pip命令进行安装 pip install sortedc…

    python 2023年5月13日
    00
  • 一文带你搞懂Python中的文件操作

    一文带你搞懂Python中的文件操作 Python中的文件操作是编程中常用的一项操作。这里将介绍Python中文件的读写、创建、删除、重命名等操作。 打开文件 使用Python中的open()函数可以打开文件。其基本格式为: file = open(file_path, mode) 其中,file_path为文件路径,mode为打开文件的模式。 常用的打开文…

    python 2023年5月20日
    00
  • 利用python实现命令行有道词典的方法示例

    下面是利用Python实现命令行有道词典的攻略。 准备工作 首先,我们需要安装Python 3及以上版本,以及以下两个Python库: requests:用于发送HTTP请求和获取响应内容。 lxml:基于libxml2的Python解析库,用于解析HTML和XML文档。 你可以使用pip安装这两个库: pip install requests lxml 实…

    python 2023年5月13日
    00
  • python实现定时播放mp3

    在本攻略中,我们将介绍如何使用Python实现定时播放mp3。以下是一个完整攻略,包括两个示例。 步骤1:安装所需库 首先,需要安装所需的库。我们可以使用pygame库来播放mp3,并使用schedule库来实现定时播放。 以下是示例代码,演示如何使用pip安装pygame和schedule库: pip install pygame pip install …

    python 2023年5月15日
    00
  • python3新特性函数注释Function Annotations用法分析

    下面我将为你详细讲解“Python 3 新特性函数注释(Function Annotations)用法分析”的完整攻略。 什么是函数注释? 函数注释(Function Annotations)是Python 3新增的特性,它可以在函数定义中添加一些元数据,用于描述函数的参数、返回值等信息。这些注释可以是任意的Python表达式,但通常是类型信息。 函数注释的…

    python 2023年6月5日
    00
  • python中的import、from import及import as的区别解析

    当我们需要在Python程序中引入其他模块或者库时,常用的方式就是通过import关键字引入。除了常规的import语句之外,还可以使用不同的import方式,例如from import和import as。这些方式有不同的使用场景和语法规则,请看下文的解析。 import 使用import关键字调用另一个脚本或模块,它可以作为自己内部属性的组成部分。在使用…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部