首页 > 编程语言 >Python web crawler(9)多任务同步、异步(协程)

Python web crawler(9)多任务同步、异步(协程)

时间:2024-03-05 12:00:36浏览次数:22  
标签:__ web task run Python sleep 协程 asyncio

这是一个简单的同步任务

import time

def run(i):
    print('开启任务=====', i)
    time.sleep(2)
    print('结束任务=====', i)

if __name__ == '__main__':
    for i in range(1, 5):
        run(i)

运行过程

开启任务===== 1
结束任务===== 1
开启任务===== 2
结束任务===== 2
开启任务===== 3
结束任务===== 3
开启任务===== 4
结束任务===== 4

进程已结束,退出代码0

把同步任务改造成异步任务(协程)

import asyncio
import random

async def run(i):
    print('开启任务=====', i)
    await asyncio.sleep(random.randint(3, 8))
    print('结束任务=====', i)

if __name__ == '__main__':
    task_list = []
    for i in range(1, 5):
        c = run(i)  # 协程对象
        task = asyncio.ensure_future(c)
        task_list.append(task)

    loop = asyncio.get_event_loop()
    # 使用asyncio.wait把我们多任务的列表注册到时间循环上
    loop.run_until_complete(asyncio.wait(task_list))
    # print(asyncio.wait(task_list))

改造第1步,导入函数

import asyncio

改造第2步,把“普通函数”改造成“协程函数”

def run(i):  --> async def run(i):

改造第3步 ,time.sleep()是同步代码写法,协程阻塞写法应该使用asyncio.sleep()

time.sleep()  --> asyncio.sleep()

改造第4步 ,使用await挂起阻塞调用

asyncio.sleep()  --> await asyncio.sleep()

async定义的函数def run(i) ,里面的耗时任务asyncio.,必须被await挂起,

改造第5步 ,将主题函数中的运行函数,改造成“协程对象”

run(i):  --> c = run(i)

改造第6步 ,创建task任务,并把run塞入

task = asyncio.ensure_future(c)

改造第7步 ,把task任务统一放入事件循环中,因此提前创建一个task_list = []空列表,再把每次for循环出来的分task任务依次接收进来

task_list = []

task_list.append(task)

改造第8步 ,

标签:__,web,task,run,Python,sleep,协程,asyncio
From: https://www.cnblogs.com/Magiclala/p/18053705

相关文章

  • 怎么使用Docker运行Python代码
    需要使用Docker镜像运行Python代码编写Dockefile文件示例如下#需要使用的镜像版本FROMpython:3.11#代码工作目录WORKDIR/code#拷贝依赖文件COPYrequirements.txtrequirements.txt#安装依赖RUNpipinstall-rrequirements.txt-ihttps://pypi.doubanio.com/......
  • vite项目使用websocket通讯封装
    项目使用vue3+piniaimport{defineStore}from'pinia';import{getCurrentInstance}from'vue';exportconstuseSocketStore=defineStore('socket',()=>{const{proxy}=getCurrentInstance();constwsUrl=proxy.$......
  • 从Python语言的角度看C++的指针
    技术背景从一个PythonCoder的角度来说,其实很羡慕C++里面指针类型的用法,即时指针这种用法有可能会给程序带来众多的不稳定因素(据C++老Coder所说)。本文主要站在一个C++初学者的角度来学习一下指针的用法,当然,最好是带着一定的Python基础再去学习C++的逻辑,会更容易一些。内存地址赋......
  • python打包exe
    参考:https://blog.csdn.net/zkkkkkkkkkkkkk/article/details/125082767一、为什么要打包    就比如你在具有Python环境的A电脑上开发了一个程序,现在A电脑坏掉了,你只能在B电脑上去执行你开发的程序。但是呢B电脑又没有Python环境,短时间又不能解决环境问题。这时候就需要用到......
  • javaweb04-maven&web入门
    maven依赖管理:管理项目依赖的jar包,避免版本冲突统一项目结构:提供标准统一的项目结构标准的项目构建:标准跨平台的自动化项目构建方式maven坐标groupid:定义当前项目隶属组织名称artifactid:定义当前项目名称version:定义当前项目版本号依赖依赖传递排除依赖<exclusion>......
  • javaweb03-前端工程
    Ajax异步的Javascript和XML数据交换异步交互:在不重载页面的情况下,与服务器交换数据并更新部分网页Axios入门前后端分离开发需求分析->接口定义->前后端并行开发->测试->前后端联调开发YAPI接口管理平台前端工程化规范化、标准化前端开发环境准备vue-cli脚手架Vu......
  • python元类
    python元类classCar(object):def__init__(self,name):print('init')self.name=namedef__new__(cls,*args,**kwargs):print('new')returnsuper().__new__(cls)obj=Car('雪佛兰')#输......
  • 3.1日javaweb
     今天继续进行项目的编写packagecom.example.service;importcom.example.mapper.UserMapper;importcom.example.pojo.Application;importcom.example.pojo.Plan;importcom.example.pojo.User;importorg.springframework.beans.factory.annotation.Autowired;impo......
  • Python工具箱系列(五十)
    使用PIL加工图片 常见的图片操作包括但不限于:•大小进行变化•旋转•翻转•使用滤镜进行处理•剪切   以下python代码演示了如何将一幅美女图进行多种加工处理,并且汇集在一起,形成一个类似于照片墙的相关操作。fromPILimportImagefromPILimportImageFilterf......
  • python与人工智能
    由于无文化是机器学习学是大模型一些就用开发,大部份教学都是python方便实验,就导致了要对python第二遍在过一下相关知识,虽然10年前学一遍python和web开发,估记也忘记差不多了,主要是针对ES文件检索,向量数据库,字符串处理,ESP32 fask这些也不太熟了,所以整理一下pythonAI应用开发......