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 代码将包含键值对的文件的所有键放在引号中? [关闭]

    【问题标题】:How can I put all keys of file that contain key value pairs in quotes using python code? [closed]如何使用 python 代码将包含键值对的文件的所有键放在引号中? [关闭] 【发布时间】:2023-04-04 17:23:02 【问题描述】: 我有…

    Python开发 2023年4月6日
    00
  • Python实现获取命令行输出结果的方法

    当我们在使用 Python 时,常常需要通过执行命令行来获得命令的输出结果。本篇文章将详细讲述 Python 实现获取命令行输出结果的方法。 subprocess 模块的介绍 Python 内置的 subprocess 模块可以用于与子进程进行交互,其中包括启动子进程并且读取子进程的输出。这是实现获取命令行输出结果的常用手段。 下面是基于 subproces…

    python 2023年6月5日
    00
  • python数据结构之递归方法讲解

    Python数据结构之递归方法讲解 递归是一种常用的编程技巧,它可以将一个问题分解成更小的子问题,直到问题变得足够简单,可以直接解决。在Python中,递归可以用于解决许多问题,例如计算阶、斐波那契数列等。本文将详细介绍Python中递归的用法和示例。 递归的基本原理 递归是一种函数调用自身的技术。在递归函数中,函数会不断地调用自身,直到满足某条件才停止递归…

    python 2023年5月13日
    00
  • Python中字符串的修改及传参详解

    Python中字符串的修改及传参详解 在Python中,字符串是不可变对象,即一旦创建后就不能被修改。但是在某些情况下,我们需要对字符串做修改或传参,这时候就需要借助一些技巧来实现。本攻略将为您详细讲解Python中字符串的修改及传参方法。 字符串的修改 Python中的字符串是不可变对象,因此不能直接对其进行修改。但是可以通过字符串的切片、拼接等方法来实现…

    python 2023年6月5日
    00
  • 一文带你探寻Python中的生成器

    一文带你探寻Python中的生成器 在Python中,生成器是一种特殊的迭代器,它可以让我们以一种更加高效和简洁的方式处理大量数据。本文将为大家讲解Python中的生成器,包括生成器的定义、生成器表达式、生成器的使用方法及实际应用示例。 什么是生成器? 生成器是一种可以“延迟生成”的迭代器。与列表等容器类型的数据结构不同,生成器并不需要一次性将所有数据生成出…

    python 2023年6月5日
    00
  • Python手写回归树的实现

    Python手写回归树的实现攻略 简介 回归树是一种常用的回归挖掘技术,其基本思想是通过对样本数据的递归划分来建立模型,对于每一次的划分都是基于当前样本集中的某一个特征,根据该特征分裂为若干子集,使得每个子集的目标值尽可能的接近,最终达到建立决策树模型的目的。在本文中,我们将使用 Python 语言手写一个回归树模型,并使用两个实例来说明其基本使用方法和实现…

    python 2023年6月3日
    00
  • python中关于for循环的碎碎念

    下面是Python中关于for循环的完整攻略,包括循环的语法、range函数的使用、嵌套循环、列表推导式、以及两个示例说明。 1. 循环的语法 在Python中,可以使用for循环遍历一个序列(字符串、列表、元组等)中的元素,格式如下: for 变量 in 序列: 执行代码块 其中,变量表示序列中的每个元素,执行代码块是需要重复执行的代码。 示例代码: fr…

    python 2023年6月3日
    00
  • python执行外部程序的常用方法小结

    下面是关于”python执行外部程序的常用方法小结”的详细讲解。 1. 常用方法 1.1 subprocess模块 Python中的subprocess模块是调用系统命令的一个常用模块,subprocess模块允许我们启动新进程、连接到它们的输入/输出/错误管道,获取退出码等等。 具体使用方式如下: import subprocess cmd = &quot…

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