Python并发concurrent.futures和asyncio实例

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 自动化常用操作及glob使用大全

    下面我就来详细讲解一下关于“Python 自动化常用操作及glob使用大全”的完整攻略。本文主要介绍如何用Python实现自动化操作,包括文件操作、网络请求、图像处理等,并介绍了使用glob模块查询文件的方法。 一、Python 自动化常用操作 本节主要介绍一些Python自动化操作的示例。 1. 文件操作 创建文件夹 import os os.mkdir(…

    python 2023年5月19日
    00
  • 初学Python函数的笔记整理

    下面是“初学Python函数的笔记整理”的完整攻略。 一、为什么要学习函数? 在编写程序的时候,我们经常需要重复使用某些代码逻辑。如果每次都重复编写一遍,不仅费时费力,而且容易出错。这时候,函数的作用就体现出来了:将一些重复使用的代码逻辑封装在函数中,我们每次需要使用时,只需要调用函数,减少了重复编写代码的工作量。 二、函数的定义及使用 1.函数的定义 函数…

    python 2023年6月3日
    00
  • APPium+Python编写真机移动端自动化脚本的项目实践

    下面我将详细讲解“APPium+Python编写真机移动端自动化脚本的项目实践”的完整攻略。 一、项目背景 在移动互联网时代,移动端自动化测试已成为软件测试的一个重要环节。而APPium+Python是目前最受欢迎的移动端自动化测试组合。本项目主要是利用APPium和Python编程语言,编写真机移动端自动化脚本,来检验移动应用的稳定性、兼容性和性能等方面的…

    python 2023年5月23日
    00
  • python 获取剪切板内容的两种方法

    在Python中,可以使用两种方法获取剪切板内容:使用pyperclip库和使用win32clipboard库。本文将详细讲解这两种方法,包括两个示例。 方法一:使用pyperclip库 pyperclip是一个Python库,用于访问剪贴板。以下是一个示例代码,演示如何使用pyperclip库获取剪切板内容: import pyperclip text =…

    python 2023年5月15日
    00
  • Python 内置函数之随机函数详情

    Python 内置函数之随机函数详情 概述 Python提供了丰富的随机数生成函数,通过这些函数我们可以轻松地生成各种类型的随机数。下面我们一一介绍这些随机数生成函数的使用方法。 random.random() 这个函数用来生成一个0到1之间的随机小数,包括0但不包括1。 import random print(random.random()) # 输出一个…

    python 2023年6月3日
    00
  • python获得图片base64编码示例

    下面是Python获得图片Base64编码的完整攻略。 准备工作 在开始之前,你需要安装Python的base64模块,它是Python内置的模块,已经包含在Python的标准库中。如果你使用的是Python 2,那么你需要使用base64模块中的encodestring()方法,如果你使用的是Python 3,则你需要使用base64模块中的encodeb…

    python 2023年5月18日
    00
  • Python如何利用xlrd和xlwt模块操作Excel表格

    下面我将详细讲解一下如何利用Python中的xlrd和xlwt模块来操作Excel表格。 简介 xlrd和xlwt分别是Python中用于读取和写入Excel文件的第三方模块。其中,xlrd模块能够读取Excel文件中的数据和格式信息,并将其封装成Python对象;而xlwt模块则可以在Python环境中对Excel文件进行写入、修改和保存操作。这两个模块结…

    python 2023年5月13日
    00
  • python登陆asp网站页面的实现代码

    Python登陆ASP网站页面的实现代码攻略 在本攻略中,我们将介绍如何使用Python实现登陆ASP网站页面的代码。我们将使用Python的requests库和BeautifulSoup库来实现这个过程。 步骤1:分析网页结构 首先,我们需要分析ASP网站登陆页面的网页结构。我们可以使用Chrome浏览器的开发者工具来查看网页结构。在网页上右键单击,然后选…

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