首页 > 编程语言 >python 并行执行

python 并行执行

时间:2023-08-07 16:12:51浏览次数:45  
标签:python len 列表 lst num time chunks 并行执行

[python 多进程及并行计算: multiprocessing总结 & joblib.Parallel函数] (https://www.cnblogs.com/dychen/p/15743087.html)

背景

如果你想在程序中并行执行一段代码, 然后得到最后的返回结果, 如果使用多进程或者多线程会相对复杂, 这里提供一个简单方法
这里的例子就是仿照如果你有一个很长的列表, 里面都是任务, 先将整个列表任务切分成多个, 然后通过多进程或者多线程去执行, 让速度更快, 但是对于最后的结果却又是顺序的, 直接取出即可使用

from joblib import Parallel, delayed
import time
from typing import List


def single(a):
    """ 定义一个简单的函数  """
    time.sleep(1)  # 休眠1s
    # print(a)  # 打印出a
    return a


def split_list(lst: list, num: int = None, num_chunks: int = None) -> List[List]:
    """
    均匀分割列表为多个子列表
    :param lst: 传入一个列表
    :param num: 每个小列表有 num 个
    :param num_chunks: 想要将列表均匀分割成 num_chunks 个
    :return:
    """
    if num:
        return [lst[i:i + num] for i in range(0, len(lst), num)]
    if num_chunks > len(lst):
        raise TypeError(f'长度为{len(lst)}的列表无法分成{num_chunks}份')
    avg_chunk_size = len(lst) // num_chunks  # 每个小列表的平均大小
    remainder = len(lst) % num_chunks  # 余数,用于将剩余的元素添加到后一个列表中
    result = [lst[i:i + avg_chunk_size] for i in range(0, len(lst), avg_chunk_size)]
    if remainder > 0:
        result[-1].extend(lst[-remainder:])
    return result


def in_loop(i: int):
    start = time.time()  # 记录开始的时间
    for i in range(i):  # 执行10次single()函数
        single(i)
    Time = time.time() - start  # 计算执行的时间
    print("loop using " + str(Time) + 's')


def inparallel():
    start = time.time()  # 记录开始的时间
    # backend: ['loky', 'multiprocessing', 'sequential', 'threading']
    results = Parallel(n_jobs=-1, backend="threading")(
        delayed(single)(i) for i in split_list([i for i in range(10000)], num=100))
    for result in results:
        ...
        # print(result)
    print(len(results))
    Time = time.time() - start  # 计算执行的时间
    print("inparallel using " + str(Time) + 's')


if __name__ == '__main__':
    in_loop(100)
    inparallel()

标签:python,len,列表,lst,num,time,chunks,并行执行
From: https://www.cnblogs.com/Dr-wei/p/17611687.html

相关文章

  • Python基础day61 Django choices参数和Ajax技术简介
    choices参数的使用choices是ORM中常用字段的参数作用:类似于一些字段:性别、学历、客户来源、是否上学、是否结婚等有限较少选择的字段我们在表中存储的时候一般使用choices参数,用数字替代文字。案例classCustomer(models.Model):"""客户表"""qq=m......
  • 一招让你的Python爬虫事半功倍
    在Python爬虫的世界里,你是否也被网站的IP封锁问题困扰过?别担心,我来教你一个简单而又有效的爬虫ip设置方法,让你的爬虫畅行无阻!快来跟我学,让你的Python爬虫事半功倍,轻松搞定IP封锁问题!首先,我们来了解一下爬虫ip是什么?爬虫ip:爬虫ip是指通过中间服务器转发请求并获取响应的一种技术手段......
  • 使用python,利用公网服务器时间更新windows本地时间
    有时候,我们会发现无法连接windows的时间服务器或者内网的时间服务器本身的时间不准。于是,可以通过如下python脚本示例,从公网任意服务器获取其服务器时间,这样更新的时间较为准确。#-*-coding:utf-8-*-importdatetimeimportsubprocessimportrequestsimporttimedefset_......
  • python re将字符串中的数字乘二
    importredefdouble(matched):value=int(matched.group('value'))returnstr(value*2)s='A23G4HFD567'print(re.sub('(?P<value>\d+)',double,s))#1.?P<value>的意思就是命名一个名字为value的组,匹配规则符合后面的/d+#......
  • 一招让你的Python爬虫事半功倍
    在Python爬虫的世界里,你是否也被网站的IP封锁问题困扰过?别担心,我来教你一个简单而又有效的爬虫ip设置方法,让你的爬虫畅行无阻!快来跟我学,让你的Python爬虫事半功倍,轻松搞定IP封锁问题!首先,我们来了解一下爬虫ip是什么?爬虫ip:爬虫ip是指通过中间服务器转发请求并获取响应的一种技术手段......
  • python esp32 json pyserial
    esp32:#include<ArduinoJson.h>voidsetup(){Serial.begin(9600);}voidloop(){if(Serial.available()){//读取串口输入的数据StringjsonString=Serial.readStringUntil('\n');//创建JSON文档StaticJsonDocument<300>......
  • python 获取本机IP(公网,局域网)
    获取公网IP1importrequests2importre3res=requests.get("https://myip.ipip.net",timeout=5).text4ip=re.findall(r'(\d+\.\d+\.\d+\.\d+)',res)[0]5print(ip)获取局域网IP1importsocket23res=socket.gethostbyname(socket.g......
  • PEP 703作者给出的一种no-GIL的实现——python3.9的nogil版本
    PEP703的内容是什么,意义又是什么呢?可以说python的官方接受的no-GIL提议的PEP就是PEP703给出的,如果GIL帧的从python中移除那么可以说对整个python生态圈将有着跨越性发展的意义。  ====================================================  PEP703地址:https://peps.python.org......
  • ChatGPT 作为 Python 编程助手
    推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景简单的数据处理脚本我认为一个好的起点是某种数据处理脚本。由于我打算让ChatGPT之后使用各种Python库编写一些机器学习脚本,这似乎是一个合理的起点。目标首先,我想尝试加载数据集;确保所有数据集值都是数值,或将其转......
  • python爬虫之scrapy框架介绍
    一、Scrapy框架简介Scrapy是一个开源的Python库和框架,用于从网站上提取数据。它为自从网站爬取数据而设计,也可以用于数据挖掘和信息处理。Scrapy可以从互联网上自动爬取数据,并将其存储在本地或在Internet上进行处理。Scrapy的目标是提供更简单、更快速、更强大的方式来从网......