技术周总结 2024.06.24~06.30(Python并发执行shell并发执行 Spring Bean)

文章目录

  • 一、 06.26 周三
    • 1.1)问题01:怎么在mysql的命令行中查询出来 python能使用的元祖结果集
    • 1.2)问题02:python中 set()是什么,怎么使用
  • 二、06.27 周四
    • 2.1)问题01:shell 并发执行
    • 2.2)问题02:python 并发执行一段程序
      • 2.2.1)遇到的问题及解决:
    • 2.3)问题03:python中运行 shell命令
  • 三、06.29 周六
    • 3.1)问题01:Python运行报错处理
      • 重现错误
      • 修复方法
      • 正确使用示例
    • 3.2)问题02:python3 list转字符串
      • 假设有一个数字列表
      • 先将数字列表中的元素转换为字符串,然后用join方法连接,用逗号分隔
    • 3.3)问题03:Python中的异常处理是怎样的?
  • 四、06.30 周日
    • 4.1)问题01: Spring框架中Bean的注解有哪些?
    • 4.2) 问题02: Python3中的函数入参中的 一个*,两个*代表什么含义
      • 一个星号 (`*args`)
        • 示例
      • 两个星号 (`**kwargs`)
        • 示例
      • 综合示例
      • 总结

一、 06.26 周三

1.1)问题01:怎么在mysql的命令行中查询出来 python能使用的元祖结果集

在 MySQL 的命令行中,您可以执行查询并使用SELECT语句来检索数据。如果您想要获取一个 Python 可以使用的元组结果集,可以使用 MySQL 命令行客户端的--skip-column-names选项来禁用列名,并且使用\G选项来以垂直方式显示结果。

下面是一个示例,假设您有一个名为users的表,其中包含idname列:

SELECT id, name FROM users;

如果您想要以元组形式显示结果集,可以这样做:

mysql -u your_username -p your_database -e "SELECT id, name FROM users;" --skip-column-names | sed 's/\t/,/g' | sed 's/^/(/' | sed 's/$/)/' | sed 's/\n/,/g' | sed 's/,,/),(/g'

这将以元组形式显示结果集,例如(1, 'Alice'),(2, 'Bob'),(3, 'Charlie')。您可以将这些结果集复制到 Python 代码中并将其用作元组。

1.2)问题02:python中 set()是什么,怎么使用

在Python中,set()是一个内置函数,用于创建集合对象。集合是一种无序、不重复的数据结构。你可以使用set()函数来创建空集合或从其他可迭代对象(如列表、元组等)创建集合。

以下是一些示例用法:

  1. 创建空集合:
my_set = set()
  1. 从列表创建集合:
my_list = [1, 2, 3, 1, 2]
my_set = set(my_list)
print(my_set)  # 输出: {1, 2, 3}
  1. 添加元素到集合:
my_set.add(4)
print(my_set)  # 输出: {1, 2, 3, 4}
  1. 从字符串创建集合:
my_string = "hello"
my_set = set(my_string)
print(my_set)  # 输出: {'o', 'h', 'e', 'l'}

通过set()函数,你可以方便地操作集合对象,进行集合运算(如并集、交集、差集等)。

二、06.27 周四

2.1)问题01:shell 并发执行

在Shell脚本中,可以使用&符号来实现并发执行多个命令或任务。这样可以让多个命令同时运行,而不必等待一个命令执行完毕后再执行下一个命令。下面是一个简单的示例:

#!/bin/bash

# Command 1 runs in the background
command1 &

# Command 2 runs in the background
command2 &

# Wait for all background processes to finish
wait

在这个示例中,command1command2 是两个要并发执行的命令。通过在命令末尾加上&符号,可以让它们在后台同时运行。wait命令用于等待所有后台进程执行完毕。

2.2)问题02:python 并发执行一段程序

在 Python 中,可以使用多线程或多进程来实现并发执行一段程序。以下是使用 concurrent.futures 模块中的 ThreadPoolExecutorProcessPoolExecutor 实现并发执行的示例:

使用 ThreadPoolExecutor 实现多线程并发执行:

import concurrent.futures

def your_function():
    # Your code here
    print("Executing your function")

# Create a ThreadPoolExecutor with 5 threads
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    # Submit your function to the executor
    future = executor.submit(your_function)

    # Get the result (this will block until the function is done)
    result = future.result()

使用 ProcessPoolExecutor 实现多进程并发执行:

import concurrent.futures

def your_function():
    # Your code here
    print("Executing your function")

# Create a ProcessPoolExecutor with 5 processes
with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor:
    # Submit your function to the executor
    future = executor.submit(your_function)

    # Get the result (this will block until the function is done)
    result = future.result()

这些示例展示了如何使用 ThreadPoolExecutorProcessPoolExecutor 来实现并发执行一段程序。根据需要选择线程或进程执行模式。

2.2.1)遇到的问题及解决:

ModuleNotFoundError: No module named ‘concurrent.futures’; ‘concurrent’ is not a package
这错误通常是由于在Python 2中引入的concurrent.futures模块在Python 3中被删除导致的。

确保你正在使用Python 3,并尝试以下修复方法:

  1. 使用Python 3: 确保你的Python环境是Python 3。

  2. 尝试使用ThreadPoolExecutor和ProcessPoolExecutor的替代方法:如果concurrent.futures不可用,你可以尝试使用threading模块来实现多线程,并使用multiprocessing模块来实现多进程。这两个模块是Python标准库的一部分,应该可以在任何Python环境中使用。

下面是一个使用threading模块的示例:

import threading

def your_function():
    print("Executing your function")

# 创建并启动5个线程
threads = []
for _ in range(5):
    thread = threading.Thread(target=your_function)
    threads.append(thread)
    thread.start()

# 等待所有线程完成
for thread in threads:
    thread.join()

这种方法可以在不使用concurrent.futures的情况下实现并发执行。

2.3)问题03:python中运行 shell命令

在Python中,你可以使用subprocess模块来运行Shell命令
当你需要将命令和参数组合成一个字符串时,你可以使用shell=True参数来运行Shell命令。这样可以让你直接将命令和参数组合成一个字符串作为参数传递给subprocess.run()函数。下面是一个示例:

import subprocess

# 组合命令和参数成一个字符串
command = "ls -l"

# 运行Shell命令
result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, text=True)

# 打印命令的输出
print(result.stdout)

在这个示例中,我们将命令和参数组合成一个字符串"ls -l",然后将shell=True传递给subprocess.run()函数,以便直接运行这个命令。这样就可以将命令和参数放在一起。

三、06.29 周六

3.1)问题01:Python运行报错处理

>>> range_obj = range(3)
>>> list1= list(ra)
raise      range(     range_obj
>>> list1= list(range_obj)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

解决办法:
出现 TypeError: 'list' object is not callable 错误,通常是因为在代码的其他地方已经定义了一个名为 list 的变量,并且该变量的值是一个列表。这会覆盖内置的 list 函数,从而导致无法调用内置的 list 函数。

要解决这个问题,请检查你的代码,确保没有定义一个名为 list 的变量。以下是一个示例说明了这个问题以及如何修复它:

重现错误

# 误定义一个名为 list 的变量
list = [1, 2, 3]

# 尝试使用 list() 函数会引发错误
range_obj = range(3)
list1 = list(range_obj)  # TypeError: 'list' object is not callable

修复方法

  1. 重命名变量:避免使用 list 作为变量名,以免覆盖内置的 list 函数。
# 避免使用 list 作为变量名
my_list = [1, 2, 3]

# 使用内置的 list() 函数将 range 对象转换为列表
range_obj = range(3)
list1 = list(range_obj)

print(list1)  # 输出:[0, 1, 2]
  1. 删除错误的变量定义:如果已经定义了 list 变量,可以通过 del 关键字删除它,以恢复对内置 list 函数的访问。
# 删除误定义的 list 变量
del list

# 使用内置的 list() 函数将 range 对象转换为列表
range_obj = range(3)
list1 = list(range_obj)

print(list1)  # 输出:[0, 1, 2]

正确使用示例

确保没有覆盖 list 函数,并正确使用它将 range 对象转换为列表。

# 确保没有覆盖内置的 list 函数
# 不要定义变量名为 list

range_obj = range(3)
list1 = list(range_obj)

print(list1)  # 输出:[0, 1, 2]

通过确保不使用内置函数的名称作为变量名,可以避免这种错误并正确使用 Python 的内置函数。

3.2)问题02:python3 list转字符串

假设有一个数字列表

num_list = [1, 2, 3, 4, 5]

先将数字列表中的元素转换为字符串,然后用join方法连接,用逗号分隔

result = ', '.join(map(str, num_list))
print(result)

3.3)问题03:Python中的异常处理是怎样的?

在这里插入图片描述

try:
    runoob()
except AssertionError as error:
    print(error)
else:
    try:
        with open('file.log') as file:
            read_data = file.read()
    except FileNotFoundError as fnf_error:
        print(fnf_error)
finally:
    print('这句话,无论异常是否发生都会执行。')

主动抛异常,使用 raise

x = 10
if x > 5:
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

四、06.30 周日

4.1)问题01: Spring框架中Bean的注解有哪些?

Spring 框架提供了多种 Bean 注解,下面列举了一些常用的注解:

  1. @Component:用于标注普通的 Spring Bean。它是一种通用的构造型注解,可以用于任何 Spring Bean。

  2. @Repository:用于标注数据访问层(DAO)的 Bean。这个注解是 @Component 的特化版本,用于标注数据访问组件。

  3. @Service:用于标注业务层的 Bean。这个注解是 @Component 的特化版本,用于标注业务层组件。

  4. @Controller:用于标注 Web 层的 Bean。这个注解是 @Component 的特化版本,用于标注控制器组件。

  5. @Configuration:用于标注配置类。被标注的类会被 Spring 容器当作配置类,并用于生成 Bean 实例。

  6. @Bean:用于标注方法,该方法会返回一个要纳入 Spring 容器管理的 Bean 实例。通常与 @Configuration 注解一起使用。

  7. @Scope:用于指定 Bean 的作用域,如 singleton、prototype 等。

  8. @Qualifier:用于为 Bean 提供限定符,以区分多个同类型的 Bean。

  9. @Value:用于注入外部的属性值,如配置文件中的值。

  10. @Autowired:用于自动装配 Bean 依赖关系。

这些是 Spring 框架中常用的 Bean 注解,它们可以帮助我们更加便捷地管理 Spring Bean 的生命周期和依赖关系。当然,还有一些其他的注解也很有用,具体可以根据实际需求进行选择和使用。

4.2) 问题02: Python3中的函数入参中的 一个*,两个*代表什么含义

在Python中,函数参数前的一个星号 (*) 和两个星号 (**) 有特殊的含义,用于处理不定数量的参数。

一个星号 (*args)

一个星号用于传递可变数量的位置参数。参数名前的一个星号 * 会将传递给函数的所有位置参数收集到一个元组中。

示例
def example_function(*args):
    for arg in args:
        print(arg)

example_function(1, 2, 3, 4)

输出:

1
2
3
4

在这个例子中,*args 收集了所有传递的位置参数 (1, 2, 3, 4) 并将其作为一个元组传递给函数。

两个星号 (**kwargs)

两个星号用于传递可变数量的关键字参数。参数名前的两个星号 ** 会将传递给函数的所有关键字参数收集到一个字典中。

示例
def example_function(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

example_function(name="Alice", age=30, city="New York")

输出:

name: Alice
age: 30
city: New York

在这个例子中,**kwargs 收集了所有传递的关键字参数并将其作为一个字典传递给函数。

综合示例

你也可以在同一个函数中同时使用 *args**kwargs,它们可以一起处理位置参数和关键字参数。

def example_function(*args, **kwargs):
    print("args:", args)
    print("kwargs:", kwargs)

example_function(1, 2, 3, name="Alice", age=30)

输出:

args: (1, 2, 3)
kwargs: {'name': 'Alice', 'age': 30}

总结

  • *args 用于接收任意数量的位置参数,并将其作为一个元组传递。
  • **kwargs 用于接收任意数量的关键字参数,并将其作为一个字典传递。

这些特性使得Python函数能够更灵活地处理不同数量和类型的参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/768895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工程文件参考——CubeMX+LL库+SPI主机 阻塞式通用库

文章目录 前言CubeMX配置SPI驱动实现spi_driver.hspi_driver.c 额外的接口补充 前言 SPI&#xff0c;想了很久没想明白其DMA或者IT比较好用的方法&#xff0c;可能之后也会写一个 我个人使用场景大数据流不多&#xff0c;如果是大批量数据交互自然是DMA更好用&#xff0c;但考…

WPF自定义模板--TreeView 实现菜单连接线

有些小伙伴说&#xff0c;在TreeView中&#xff0c;怎么每一个都加上连接线&#xff0c;进行显示连接。 代码和效果如下&#xff1a; 其实就是在原来的模板中增加一列显示线条&#xff0c;然后绘制即可 <Window x:Class"XH.TemplateLesson.TreeViewWindow"xmln…

使用EndNote在Word中插入参考文献,并编辑参考文献样式方法

一、背景 在准备中期报告时&#xff0c;学校给的是Word模板&#xff0c;习惯了Latex排版和添加参考文献的便利后&#xff0c;真不想用word写东西。 之前投《机器人》期刊&#xff08;被拒了&#xff09;和准备开题的时候也是用word写的&#xff0c;当时为方便添加参考文献和定…

C++初学者指南-3.自定义类型(第一部分)-异常

C初学者指南-3.自定义类型(第一部分)-异常 文章目录 C初学者指南-3.自定义类型(第一部分)-异常简介什么是异常&#xff1f;第一个示例用途:报告违反规则的行为异常的替代方案标准库异常处理 问题和保证资源泄露使用 RAII 避免内存泄漏&#xff01;析构函数&#xff1a;不要让异…

labview技巧——AMC框架安装

AMC工具包的核心概念是队列&#xff0c;队列是一种先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的数据结构&#xff0c;适用于处理并发和异步任务。在LabVIEW中&#xff0c;队列可以用于在不同VI之间传递数据&#xff0c;确保消息的有序处理&#xff0…

LT8668SXC 、LT8668SX-D 、LT8668SX三种芯片的相似与不同

一、LT8668SXC(支持eDP输出&#xff09; 定义:LT8668SXC配置在HDMI2.1标准下工作&#xff0c;最大数据速率为8Gbps。 LT8668SXC还可以配置为在Type-C输入或DP1.4a下工作&#xff0c;数据速率高达8.1Gbps。 eDP1.4b输出由8个数据通道组成&#xff0c;支持RBR (1.62Gbps)、HBR (2…

【应届应知应会】SQL常用知识点50道

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;借他一双眼&#xff0c;愿这盛世如先生所愿 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凌七七~❤ 友情提供 目录 数据库的概念 (什么是数据库) RDBMS NOSQL 数据库的分类 …

分布式锁——基于Redis分布式锁

单机锁 服务器只有一个&#xff0c;JVM只有一个。 用synchronized加锁&#xff0c;对lock对象加锁&#xff0c;只有线程1结束&#xff0c;线程2,3才会开始。 再用uid避免一个线程多次进来。 分布式锁 真正上线时&#xff1a; 【注&#xff1a;这些服务器连接的是一个Redis集…

FreeRTOS和UCOS操作系统使用笔记

FreeRTOS使用示例 UCOS使用示例 信号量使用 信号量访问共享资源区/ OS_SEMMY_SEM; //定义一个信号量&#xff0c;用于访问共享资源OSSemCreate ((OS_SEM* )&MY_SEM, //创建信号量&#xff0c;指向信号量(CPU_CHAR* )"MY_SEM", //信号量名字(OS_SEM_CTR )1, …

STM32入门笔记(03): ADC(SPL库函数版)(2)

A/D转换的常用技术有逐次逼近式、双积分式、并行式和跟踪比较式等。目前用的较多的是前3种。 A/D转换器的主要技术指标 转换时间 分辨率 例如&#xff0c;8位A/D转换器的数字输出量的变化范围为0&#xff5e;255&#xff0c;当输入电压的满刻度为5V时&#xff0c;数字量每变化…

Google Play上架防关联,打包环境是关联因素之一还是无足轻重?

在Google Play上架应用&#xff0c;对于矩阵式上架或马甲包的开发者来说&#xff0c;防关联的处理技能是必须要精通的。想象一下&#xff0c;你辛辛苦苦开发的应用&#xff0c;因为一些看似微不足道的细节&#xff0c;比如打包环境的问题&#xff0c;就可能被谷歌无情下架或封号…

力扣双指针算法题目:移动零

1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 这个题目的思路和“使用递归排序快速排序解决数组的排序问题”相同 class solution { public:void QuickSort(vector<int>& nums, int left, int right){if (left > right) return;int key left…

信息收集---端口服务信息收集

1. 什么是端口 是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口&#xff0c;其中虚拟端口指计算机内部或交换机路由器内的端口&#xff0c;不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口&#xff0c;是可见端口&#xff0c;计算机背板的RJ45…

我在高职教STM32——时钟系统与延时控制(2)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

Http 实现请求body体和响应body体的双向压缩方案

目录 一、前言 二、方案一(和http header不进行关联) 二、方案二(和http header进行关联) 三、 客户端支持Accept-Encoding压缩方式,服务器就一定会进行压缩吗? 四、参考 一、前言 有时请求和响应的body体比较大,需要进行压缩,以减少传输的带宽。 二、方案一(和…

助力构建新型电力系统自主可控实时底座

近日&#xff0c;2024亚洲新型电力系统及储能展览会&#xff06;亚洲新型电力及储能论坛会在广州广交会展馆圆满落下帷幕&#xff01;科东软件携多款电力产品亮相展会,并在2024亚洲新型电力及储能论坛发表《“鸿道Intewell操作系统助力构建新型电力系统自主可控实时底座”》的主…

Unity之创建与导出PDF

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之创建与导出PDF TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff01; 助力快速…

2024-2025年本田维修电路图线路图接线图资料更新

此次更新了2024-2025年本田车系电路图资料&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表位置等等&#xff01; 汽修帮手汽…

日期和时区

日期 时区 修改时区可分为两步 删除系统自带的 localtime 文件 rm -f /etc/localtime 将系统中内置的 Shanghai 文件软连接到 /etc/localtime中 sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

Unity3D中,AI角色Rigidbody旋转导致的动画问题

在制作一些AI角色的时候&#xff0c;可能会运用到Rigidbody组件来使AI角色拥有一些相关的物理属性&#xff0c;但是AI角色在受到一些物理碰撞或者惯性等原因&#xff0c;会发生旋转导致动画出现意料外的错误&#xff0c;比如在由动转静的时候&#xff0c;可能会发生向前翻转等一…