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

news2024/11/18 21:51:22

文章目录

  • 一、 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.coloradmin.cn/o/1890769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ARMv8/v9 GIC 系列 5 -- GIC GICD_CTRL 使用详细介绍】

文章目录 GICD_CTRLGICD_CTLR 寄存器结构RWP&#xff08;Register Write Pending&#xff09;E1NWF&#xff08;Enable 1 of N Wakeup Functionality&#xff09;DS&#xff08;Disable Security&#xff09; 亲和性路由&#xff08;Affinity Routing&#xff09;ARE_NSARE_S 中…

【分布式数据仓库Hive】常见问题及解决办法

目录 一、启动hive时发现log4j版本和hadoop的版本有冲突 解决办法&#xff1a;删除hive下高版本的slf4j 二、启动hive报错 Exception in thread "main" java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/Object;)V …

web自动化(三)鼠标操作键盘

selenuim 键盘操作 import timefrom selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selen…

ElementUI中的el-table解决宽度问题 - 根据内容自动撑开

在使用element-ui中&#xff0c;会发现表格组件el-table在未指定宽度情况下&#xff0c;会自动计算并给表格宽度赋值。但实际开发中&#xff0c;有时需要根据内容实际长度自动撑开显示&#xff0c;由内容的多少而决定表格的宽度&#xff0c;而不是默认宽度为100%。在默认情况下…

【Linux】线程——线程的概念、线程的特点、线程的优点和缺点、线程和进程、线程函数的使用

文章目录 Linux线程1. 线程的概念1.1 什么是线程 2. 线程的特点2.1 线程的优点2.2 线程的缺点2.4 线程和进程 3. 线程函数的使用pthread_create() 创建线程pthread_self() 获取线程IDpthread_exit() 线程终止pthread_cancel() 线程取消pthread_join() 线程等待pthread_detach()…

使用Redis实现消息队列:List、Pub/Sub和Stream的实践

摘要 Redis是一个高性能的键值存储系统&#xff0c;它的多种数据结构使其成为实现消息队列的理想选择。本文将探讨如何使用Redis的List、Pub/Sub和Stream数据结构来实现一个高效的消息队列系统。 1. 消息队列的基本概念 消息队列是一种应用程序之间进行通信的机制&#xff0…

docker容器间网络仿真工具-pumba

docker-tc&pumba docker-tc:docker-tc项目仓库 pumba:pumba项目仓库 这两个项目理论上都可以实现对容器间的网络环境进行各种模拟干预&#xff0c;包括延迟&#xff0c;丢包&#xff0c;带宽限制等。 但是我在实际使用时&#xff0c;发现docker-tc这个工具在进行网络进行模…

Docker 部署 Minio 对象存储服务器

文章目录 Github官网文档简介dockerdocker-compose.ymlmc 客户端mc 基础命令Golang 示例创建 test 账号密钥文件上传示例 Github https://github.com/minio/minio 官网 https://min.io/https://www.minio.org.cn/ 文档 https://www.minio.org.cn/docs/minio/kubernetes/up…

摸爬滚打半年,我是如何从小白进阶到渗透测试工程师

前言 工作也好几年了&#xff0c;在这摸爬滚打中&#xff0c;遇到了服务器被黑&#xff0c;网站被人DDOS攻击&#xff0c;数据库被篡改等等。服务器也不是你说不让人上就不让人上的&#xff0c;所以IT安全这个话题还是比较沉重的&#xff0c;涉及的东西很多&#xff0c;只有你…

个人博客|PHP源码|支持多国语言切换

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;支持多国语言的个人博客网站源码&#xff0c;支持二开&#xff0c;无加密。此博客相当简洁&#xff0c;也适合海外。详细界面和功能见下面视频演示。 如果您正好有此需求源码&#xff0c;请联系小编…

SSM学习4:spring整合mybatis、spring整合Junit

spring整合mybatis 之前的内容是有service层&#xff08;业务实现层&#xff09;、dao层&#xff08;操作数据库&#xff09;&#xff0c;现在新添加一个domain&#xff08;与业务相关的实体类&#xff09; 依赖配置 pom.xml <?xml version"1.0" encoding&quo…

一篇文章搞懂弹性云服务器和轻量云服务器的区别

前言 在众多的云服务器类型中&#xff0c;弹性云服务器和轻量云服务器因其各自的特点和优势&#xff0c;受到了广大用户的青睐。那么&#xff0c;这两者之间到底有哪些区别呢&#xff1f;本文将为您详细解析。 弹性云服务器&#xff1a;灵活多变的计算资源池 弹性云服务器&…

鸿蒙开发设备管理:【@ohos.sensor (传感器)】

传感器 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import sensor from ohos.sensor;sensor.on ACCELEROMETER on(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: C…

04-ArcGIS For JavaScript的可视域分析功能

文章目录 综述代码实现代码解析结果 综述 在数字孪生或者实景三维的项目中&#xff0c;视频融合和可视域分析&#xff0c;一直都是热点问题。Cesium中&#xff0c;支持对阴影的后处理操作&#xff0c;通过重新编写GLSL代码就能实现视域和视频融合的功能。ArcGIS之前支持的可视…

Vue+Xterm.js+WebSocket+JSch实现Web Shell终端

一、需求 在系统中使用Web Shell连接集群的登录节点 二、实现 前端使用Vue&#xff0c;WebSocket实现前后端通信&#xff0c;后端使用JSch ssh通讯包。 1. 前端核心代码 <template><div class"shell-container"><div id"shell"/>&l…

day01-切片和索引

day01-切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改&#xff0c;与 Python 中list 的切片操作一样。 ndarray数组可以基于0-n的下标进行索引 注意&#xff0c;数组切片并不像列表切片会重新开辟一片空间&#xff0c;而是地址引用&#xff0c;需要使用.copy()…

【Threejs进阶教程-着色器篇】2. Uniform的基本用法与Uniform的调试

Uniform的基本用法与Uniform的调试 关于本Shader教程优化上一篇的效果优化光栅栏高度让透明度和颜色变的更平滑pow()函数借助数学工具更好的理解函数 Unifoms简介编写uniforms修改片元着色器代码借助lil.gui调试uniforms使用uniform控制颜色继续在uniforms添加颜色在着色器中接…

动态住宅代理IP的3个优点

在大数据时代的背景下&#xff0c;代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性&#xff0c;而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

JavaScript中location对象的主要属性和方法

属性 href&#xff1a;获取或设置整个URL。protocol&#xff1a;获取URL的协议部分&#xff0c;如"http:"或"https:"。host&#xff1a;获取URL的主机名&#xff08;包括端口号&#xff0c;如果有的话&#xff09;。hostname&#xff1a;获取URL的主机名&…

Android studio 打包低版本的Android项目报错

一、报错内容 Execution failed for task :app:packageRelease. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade> com.android.ide.common.signing.KeytoolException: Failed to read key key0 from store "…