首页 > 编程语言 >python 异步的几种方式

python 异步的几种方式

时间:2024-09-12 18:15:08浏览次数:12  
标签:异步 task run python 几种 queue def loop asyncio

import asyncio
import random
import threading
from concurrent.futures import ThreadPoolExecutor
import time

def blocking_task(x):
    time.sleep(2)
    thread_name()
    print(f'arg:{x}\n')
    return x * 2

async def unblocking_task(x):
    thread_name()
    await asyncio.sleep(4)
    return x * 2

async def task_run_in_one_executor():
    print(f'task_run_in_one_executor')
    with ThreadPoolExecutor() as executor:
        futures = []
        loop = asyncio.get_event_loop()
        for x in range(10):
            futures.append(loop.run_in_executor(executor, blocking_task, x))
        print(await asyncio.gather(*futures))

def blacking_task():
    time.sleep(5)
    thread_name()
    return "after 5s"


async def return_future():
    current_loop = asyncio.get_event_loop()
    future = await current_loop.run_in_executor(ThreadPoolExecutor(), blacking_task)
    print(future)


def thread_name():
    print(f"当前线程名字:{threading.current_thread()}\n")


async def producer(queue,consumers):
    for data in range(10):
        print(f'生产者正在生产数据...{data}')
        await queue.put(data)
        await asyncio.sleep(1)
    for data in range(consumers):
        await queue.put(None)
        await queue.put(None)


async def consumer(queue,name):
    while True:
        print(f'{name}:消费者正在等待数据...')
        data = await queue.get()
        if data is None:
            print(f'{name}:任务结束')
            break
        print(f'{name}:消费者消费了数据: {data}')


def start_loop(loop):
    thread_name()
    asyncio.set_event_loop(loop)
    loop.run_forever()

async def blocking_async_task():
    await asyncio.sleep(5)
    thread_name()


def push_task_loop():
    loop_new = asyncio.new_event_loop()
    threading.Thread(target=start_loop, args=(loop_new,)).start()
    asyncio.run_coroutine_threadsafe(blocking_async_task(), loop_new)


async def new_thread_task():
    result = await asyncio.to_thread(blacking_task)
    print(result)


async def task_queue():
    queue = asyncio.Queue()
    await asyncio.gather(
        asyncio.ensure_future(producer(queue,3)),
        asyncio.ensure_future(consumer(queue,"consumer_0")),
        asyncio.ensure_future(consumer(queue,"consumer_1")),
        asyncio.ensure_future(consumer(queue,"consumer_2"))
    )


if __name__ == '__main__':
    # asyncio.run(task_run_in_one_executor())

    # asyncio.run(return_future())

    # push_task_loop()

    # asyncio.run(new_thread_task())

    asyncio.run(task_queue())

    pass


标签:异步,task,run,python,几种,queue,def,loop,asyncio
From: https://www.cnblogs.com/guanchaoguo/p/18410770

相关文章

  • Appium+python框架搭建
    一、Appium-Python-Client①安装依赖库也就大家说的客户端,这里的客户端指的是我编辑代码的界面,因为代码界面我要引入webdriver所以叫客户端,其实本质是一个依赖库跟selenium差不多②安装的命令:pipinstallAppium-Python-Client(python环境所以安装python包)③Appium-Python-Clien......
  • Python 和 Go 实现 AES 加密算法的技术详解
    AES(AdvancedEncryptionStandard,高级加密标准)是一种对称密钥加密算法,广泛应用于各种安全通信场景中。AES使用128、192或256位的密钥,能够提供不同级别的安全性。本文将详细讲解如何使用Python和Go来实现AES加密算法,提供代码示例并对其进行逐步解析。1.什么是AES加密......
  • Python文件操作:文件的读取和写入(文本文件、二进制文件)①
    文章目录1.文件操作基础1.1打开文件1.2关闭文件2.文本文件操作2.1读取文本文件2.1.1逐行读取2.1.2读取所有内容2.1.3读取所有行2.2写入文本文件2.2.1写入内容2.2.2追加内容3.二进制文件操作3.1读取二进制文件3.2写入二进制文件4.综合示例4.1示例描......
  • 基于MicroPython的ESP8266控制RGB颜色传感器识别颜色的设计方案
        以下是一个基于MicroPython的ESP8266控制RGB颜色传感器进行颜色识别的设计方案:一、硬件准备1. ESP8266开发板(如NodeMCU)。2. RGB颜色传感器(例如TCS3200传感器)。3. 面包板。4. 杜邦线若干。5.3.3V直流电源二、硬件连接1. 将ESP8266的3.3V引脚、GND......
  • 基于MicroPython的ESP8266控制舵机的设计方案
        以下是一个基于MicroPython的ESP8266控制舵机的设计方案: 一、硬件准备1. ESP8266开发板(如NodeMCU)。2. 舵机(如SG90)。3. 杜邦线若干。 二、硬件连接1.将5V直流电源连接到舵机的电源引脚(通常为红色线)。2.将3.3V直流电源连接到ESP8266的3.3V管脚。3......
  • python利用matplot绘制横向条形图,并调整每个条形的位置
    通过color_x和t_x控制每个条形的颜色和文本,draw_mybar里的y和left可以控制条形显示的位置。importmatplotlib.pyplotaspltimportnumpyasnp#数据设置categories=["A","B","C","D"]color_1="#9dc3e4"color_2="#f8cbbd"color_3=......
  • python基于django框架医院管理系统设计与实现mysql数据库
    随着信息技术的快速发展和医疗卫生事业的不断进步,医院信息化管理已成为提高医疗服务质量和效率的重要手段。本文设计并实现了一个基于PythonDjango框架的医院管理系统,旨在为医院提供一个全面、高效、易用的信息化管理平台。本系统采用Django框架作为后端开发框架,利用其强大......
  • ubuntu22.04安装python2+python命令软链接修改
      ubuntu22.04安装python2+python命令软链接修改问题由来:新版本的ubuntu默认安装python3,且可能默认的运行命令为python3,而非python。除此之外,一些古早的代码底层可能用的python2。因此,本文简单讲述如何在高版本系统中安装python2,并添加python命令(软链接)1python2安装(1)apt-ge......
  • 揭秘Python:对象类型打印
    一、Python数据类型简介在Python的世界中,了解你正在处理的数据类型是至关重要的。Python提供了多种内置数据类型,包括数字(整数和浮点数)、字符串、列表、元组、字典等。这些数据类型决定了你可以对数据执行哪些操作,以及如何高效地存储和处理数据。1.数字类型数字类型是最基本的数据......
  • Java开发者无痛丝滑入门Python
    哈喽各位道友,经过两周的更新,凡人编程传的第一个“系列”学习笔记《Python基础》已经全部上线啦,现在免费分享给大家,学习路线在下面,点击链接即可跳转对应笔记。这套笔记有什么不一样的地方呢?这套笔记适合有一定Java编程基础的道友,因为笔记语言比较简练,大多只讲重点,避免了啰嗦......