【python部分知识点简记】

目录

函数定义,判断字符串是否包含子字符串:

使用Django ORM过滤出特定name的语句:

关于Django的事务:

使用with语句写文件操作,并说明with方法的优点:

使用map()函数和列表推导式处理列表:

单例模式

Python多线程和多进程:

全局解释器锁(GIL)

为什么需要 GIL?

GIL 的限制

多线程

多线程的优点

多线程的缺点

总结

多进程

如果你需要利用多核处理器进行真正的并行计算,你应该考虑使用多进程而不是多线程。Python的multiprocessing模块提供了进行真正并行计算的工具。

性能优化的常用手段:

常用的linux命令


函数定义,判断字符串是否包含子字符串:

def contains_substring(a, b):
    return b in a

# 使用示例
result = contains_substring("welcome to my world", "world")
print(result)  # 输出: True 或 False 根据实际情况

使用Django ORM过滤出特定name的语句:

 
from django.db import models

# 假设 DiagramNode 模型已经定义好,并且已经迁移到数据库
# 过滤出 name="test_name" 的所有对象列表
objects_list = DiagramNode.objects.filter(name="test_name")

关于Django的事务:

  • transaction.atomic 是Django的一个上下文管理器,用于确保数据库操作在一个事务块中执行。如果块中的操作发生异常,事务将回滚到开始状态,保证数据的一致性。
  • from_account.balance -= amount 和 to_account.balance += amount 是账户资金的转移操作。
  • from_account.save() 和 to_account.save() 将更改保存到数据库。
  • try...except...else 结构用于捕获并处理可能发生的异常。如果事务块中的操作成功完成,将执行else块中的代码,打印"successfully"。

transaction.atomic的作用是确保在transfer_funds函数中执行的数据库操作要么全部成功,要么在出现错误时全部撤销,这样可以防止数据库状态的不一致。

使用with语句写文件操作,并说明with方法的优点:

with open('./test.txt', 'wb') as f:
    try:
        f.write("hello world")
    except:
        pass

# with方法的优点:
# - 确保文件在使用后正确关闭,即使发生异常也会执行finally块中的代码。
# - 代码更加简洁,减少了冗余的try...finally结构。
# - 提供了一种更好的资源管理方式,使得文件操作更加安全。

使用map()函数和列表推导式处理列表:

# 原始列表
original_list = [1, 2, 3, 4, 5]

# 使用map()函数将列表中的每个元素平方
squared_list = map(lambda x: x**2, original_list)

# 使用列表推导式提取出大于10的数
filtered_list = [x for x in squared_list if x > 10]

print(list(filtered_list))  # 输出: [16, 25]

注意:map()函数返回的是一个map对象,如果你需要打印或者转换为列表,需要使用list()函数进行转换。在上述代码中,我直接将map对象转换为了列表并打印出来。

在这个例子中,lambda x: x**2 是一个匿名函数,它接受一个参数 x 并返回 x 的平方。map() 函数将这个函数应用到 original_list 列表中的每个元素上,生成一个新的迭代器 squared_list,其中包含了原始列表每个元素的平方值。

最后,我们使用 list() 函数将 squared_list 转换为列表,这样就可以打印出结果了。注意,map() 函数本身并不会修改原始列表,它只是生成了一个新的迭代器。

map() 函数是 Python 中的一个内置函数,它接受一个函数和一个可迭代对象作为参数,然后返回一个 map 对象。map() 函数会对可迭代对象中的每个元素应用传入的函数,并返回一个新的迭代器。

这里是 map() 函数的一些关键点:

  1. 参数

    • 第一个参数是一个函数,这个函数将被应用到可迭代对象的每个元素上。
    • 第二个参数是一个可迭代对象,比如列表、元组等。
  2. 返回值

    • map() 返回的是一个 map 对象,这是一个迭代器,可以被用来迭代处理过后的元素。
  3. 使用 lambda 函数

    • lambda 是 Python 中的匿名函数,它允许你定义一个简短的函数。在 map() 函数中使用 lambda 可以避免定义一个完整的函数。
  4. 转换为列表

    • 由于 map() 返回的是一个迭代器,如果你想要得到一个列表,可以使用 list() 函数将迭代器转换为列表。
  5. 使用场景

    • 当你想要对一个序列的所有元素执行同一个操作时,使用 map() 是非常方便的。

单例模式

class Singleton:
    __instance = None

    def __new__(cls, age, name):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
            cls.__instance.age = age
            cls.__instance.name = name
        return cls.__instance

# 创建实例
a = Singleton(19, "test")
b = Singleton(20, "test2")

# 打印属性
print(b.age)  # 打印的是什么值? 19
print(b.name) # test

Singleton 类的实例第一次被创建时,__instance 被初始化。当再次尝试创建第二个实例(通过 b = Singleton(20, "test2")),__new__ 方法检查 __instance 是否已经存在;如果存在,它不会创建新的实例,而是返回已经存在的 __instance

因此,尽管在创建 b 时传入了 age20,但是 b 实际上引用的是与 a 相同的实例

Python多线程和多进程:

  • 多线程:Python中由于全局解释器锁(GIL)的存在,多线程在执行CPU密集型任务时可能不会带来性能上的提升,因为GIL限制了同一时刻只有一个线程可以执行Python字节码。但在I/O密集型任务中,多线程可以提高性能,因为线程可以在等待I/O操作时让其他线程运行。
  • 多进程:Python的多进程可以绕过GIL的限制,因为每个进程有自己的Python解释器和内存空间,因此可以利用多核CPU的优势并行执行。多进程适用于CPU密集型任务。

全局解释器锁(GIL)

全局解释器锁(Global Interpreter Lock,简称GIL) 是 Python 解释器在执行时使用的一种机制,用来同步线程的执行,以避免多线程在执行 Python 字节码时发生冲突。GIL 确保在任何时刻,只有一个线程在执行 Python 字节码。

为什么需要 GIL?
  1. 内存管理:Python 使用引用计数机制来管理内存,当一个对象的引用计数降到0时,会被垃圾回收。如果没有 GIL,多个线程同时修改对象的引用计数可能会导致内存泄漏或不一致。
  2. 简化实现:GIL 简化了 CPython(Python 的官方实现)的内存管理和垃圾回收机制,避免了复杂的并发控制。
  3. 兼容性:许多 Python 扩展模块(如 NumPy)在设计时考虑了 GIL 的存在,它们在执行时需要 GIL 来保证线程安全。
GIL 的限制
  1. 单线程执行:尽管 GIL 允许多线程存在,但在任何时刻只有一个线程可以执行 Python 字节码。这意味着在 CPU 密集型任务中,多线程并不能带来性能提升,反而因为线程切换和锁的开销导致性能下降。
  2. 阻塞 I/O:在执行 I/O 操作(如文件读写、网络通信)时,GIL 会被释放,允许其他线程运行。但如果 I/O 操作是阻塞的,GIL 仍然会被持有,影响其他线程的执行。

多线程

多线程 是一种并发执行的方式,允许一个程序中的多个线程同时运行。在 Python 中,多线程主要用于提高程序的并发性,尤其是在 I/O 密集型任务中。

多线程的优点
  1. 提高响应性:多线程可以提高程序的响应性,尤其是在处理用户界面或网络通信时。
  2. 利用多核 CPU:通过多线程,可以更好地利用多核 CPU 的计算能力,尤其是在 I/O 密集型任务中。
  3. 简化编程模型:多线程提供了一种相对简单的并发编程模型,易于理解和实现。
多线程的缺点
  1. GIL 的限制:由于 GIL 的存在,Python 的多线程在 CPU 密集型任务中并不能有效提高性能。
  2. 线程同步问题:多线程需要处理线程之间的同步和互斥,增加了编程的复杂性。
  3. 资源限制:每个线程都需要分配一定的系统资源(如内存),过多的线程可能会消耗大量的系统资源。

·        

import threading

def worker():
    print("Thread started")
    # 执行一些任务
    print("Thread finished")

# 创建线程
t = threading.Thread(target=worker)
t.start()  # 启动线程

# 等待线程完成
t.join()

在这个示例中,我们定义了一个 worker 函数,作为线程的执行目标。通过 threading.Thread 创建了一个线程,并调用 start() 方法启动线程。最后,通过 join() 方法等待线程完成。

总结

尽管 GIL 限制了 Python 多线程在 CPU 密集型任务中的应用,但在 I/O 密集型任务中,多线程仍然是一种有效的并发执行方式。理解 GIL 的工作原理和多线程的使用方式,可以帮助你更好地利用 Python 进行并发编程。

Python的全局解释器锁(GIL)限制了多线程的并行执行能力。GIL确保了任何时候都只有一个线程在运行Python字节码。尽管在某些操作中线程看起来是并行的,但这主要是由于线程在I/O操作时会释放GIL,允许其他线程执行。

多进程

如果你需要利用多核处理器进行真正的并行计算,你应该考虑使用多进程而不是多线程。Python的multiprocessing模块提供了进行真正并行计算的工具。

以下是一个使用multiprocessing模块的简单例子:

from multiprocessing import Process
 
def worker(num):
    print(f"Worker {num} is running")
 
def main():
    processes = []
    for i in range(4):
        p = Process(target=worker, args=(i,))
        p.start()
        processes.append(p)
 
    for p in processes:
        p.join()
 
if __name__ == "__main__":
    main()

性能优化的常用手段:

  • 后端优化
    • 代码优化:减少冗余代码,使用更高效的算法。
    • 缓存:使用内存缓存常用数据,减少数据库访问。
    • 异步处理:使用异步I/O操作提高响应速度。
    • 负载均衡:合理分配请求到多个服务器。
  • 数据库优化
    • 索引:为数据库表添加合适的索引,加速查询速度。
    • 查询优化:编写高效的SQL查询,避免全表扫描。
    • 规范化与反规范化:根据需要进行数据模型设计。
    • 分库分表:水平或垂直分割数据库以提高性能。

常用的linux命令

文件和目录操作

  1. ls - 列出目录内容
    • ls -l 显示详细列表
  2. cd - 改变当前目录
    • cd /home/user 切换到 /home/user 目录
  3. pwd - 显示当前工作目录
  4. cp - 复制文件或目录
    • cp file1 file2 复制 file1 到 file2
  5. mv - 移动或重命名文件或目录
    • mv file1 file2 移动 file1 到 file2
  6. rm - 删除文件或目录
    • rm file1 删除 file1
  7. rmdir - 删除空目录
    • rmdir dir1 删除空目录 dir1
  8. mkdir - 创建新目录
    • mkdir dir1 创建新目录 dir1
  9. touch - 创建空文件或更新文件时间戳
    • touch file1 创建空文件 file1
  10. cat - 显示文件内容
    • cat file1 显示 file1 的内容
  11. echo - 显示文本或字符串
    • echo "Hello World" 显示 "Hello World"
  12. more - 分页显示文件内容
    • more file1 分页显示 file1 的内容
  13. less - 分页显示文件内容,支持向前翻页
    • less file1 分页显示 file1 的内容
  14. head - 显示文件的前几行
    • head -n 5 file1 显示 file1 的前 5 行
  15. tail - 显示文件的最后几行
    • tail -n 5 file1 显示 file1 的最后 5 行
  16. grep - 搜索文件中的文本模式
    • grep "pattern" file1 在 file1 中搜索 "pattern"
  17. find - 在目录树中查找文件
    • find /home/user -name file1 在 /home/user 中查找名为 file1 的文件
  18. chmod - 更改文件或目录的权限
    • chmod +x file1 使 file1 可执行
  19. chown - 更改文件或目录的所有者
    • chown user file1 将 file1 的所有者更改为 user
  20. chgrp - 更改文件或目录的所属组
    • chgrp group file1 将 file1 的组更改为 group

系统管理

  1. top - 显示系统进程和资源使用情况
  2. htop - 显示系统进程和资源使用情况(增强版)
  3. ps - 显示当前进程状态
    • ps aux 显示所有进程的状态
  4. kill - 发送信号给进程
    • kill PID 发送信号给进程 ID
  5. pkill - 按名称杀死进程
    • pkill process_name 杀死所有名为 process_name 的进程
  6. nice - 更改进程的优先级
    • nice -n 10 command 以低优先级运行 command
  7. renice - 更改运行中进程的优先级
    • renice -n 10 -p PID 更改进程 ID 的优先级
  8. nohup - 忽略挂断信号运行命令
    • nohup command & 忽略挂断信号运行 command
  9. timeout - 运行命令并限制其执行时间
    • timeout 10 command 运行 command 并限制其执行时间为 10 秒
  10. sleep - 暂停指定的时间
    • sleep 10 暂停 10 秒
  11. date - 显示或设置系统日期和时间
    • date 显示当前日期和时间
  12. cal - 显示日历
  13. uptime - 显示系统运行时间和负载
  14. w - 显示当前登录用户和他们正在做的事情
  15. who - 显示当前登录用户
  16. whoami - 显示当前用户的用户名
  17. su - 切换用户
    • su - user 切换到用户 user
  18. sudo - 以超级用户权限运行命令
    • sudo command 以超级用户权限运行 command

网络配置

  1. ifconfig - 配置或显示网络接口的网络参数
  2. ip - 显示或管理路由、网络设备、接口和隧道
  3. ping - 测试网络连接
    • ping google.com 测试到 google.com 的连接
  4. traceroute - 显示数据包到达目的地的路径
    • traceroute google.com 显示到 google.com 的路径
  5. netstat - 显示网络连接、路由表、接口统计等网络信息
  6. ssh - 安全外壳协议,用于远程登录或其他网络服务
    • ssh user@server 登录到服务器 server 作为用户 user

磁盘和文件系统管理

  1. df - 显示磁盘空间使用情况
  2. du - 显示文件或目录的磁盘使用情况
    • du -sh directory 显示目录的总大小
  3. fdisk - 显示或操作磁盘分区表
  4. mkfs - 创建文件系统
    • mkfs -t ext4 /dev/sda1 在 /dev/sda1 上创建 ext4 文件系统
  5. mount - 挂载文件系统
    • mount /dev/sda1 /mnt 将 /dev/sda1 挂载到 /mnt
  6. umount - 卸载文件系统
    • umount /mnt 卸载 /mnt 挂载点

压缩和解压缩

  1. tar - 打包压缩文件
    • tar -czvf archive.tar.gz directory 将目录打包并压缩为 archive.tar.gz
  2. gzip - 压缩文件
    • gzip file1 压缩 file1
  3. gunzip - 解压缩 gzip 文件
    • gunzip file1.gz 解压缩 file1.gz
  4. zip - 创建 zip 压缩文件
    • zip archive.zip file1 file2 将 file1 和 file2 打包为 archive.zip
  5. unzip - 解压缩 zip 文件
    • unzip archive.zip 解压缩 archive.zip

文本处理

  1. sed - 流编辑器
    • sed 's/old/new/g' file1 将 file1 中的所有 "old" 替换为 "new"
  2. awk - 文本处理工具
    • awk '{print $1}' file1 打印 file1 的每一行的第一个字段
  3. sort - 对文本行进行排序
    • sort file1 对 file1 的行进行排序
  4. uniq - 报告或忽略重复的行
    • sort file1 | uniq 从 file1 中提取不重复的行
  5. wc - 计算字数
    • wc file1 计算 file1 的行数、单词数和字节数

系统监控

  1. free - 显示内存状态
  2. top - 显示系统进程和资源使用情况
  3. htop - 显示系统进程和资源使用情况(增强版)
  4. vmstat - 报告关于进程、内存、分页、块 IO、陷阱和 CPU 的统计信息
  5. iostat - 报告 CPU 和输入/输出统计信息
  6. mpstat - 报告 CPU统计信息
  7. netstat - 显示网络连接、路由表、接口统计等网络信息

系统启动和关机

  1. reboot - 重启系统
  2. shutdown - 安全关闭系统
    • shutdown -h now 立即关闭系统

权限和所有权

  1. chmod - 更改文件或目录的权限
  2. chown - 更改文件或目录的所有者
  3. chgrp - 更改文件或目录的所属组

链接

  1. ln - 创建链接(硬链接或符号链接)

  2. ln -s link_name target 创建指向目标的符号链接 link_name

软件包管理

  1. apt-get - Debian/Ubuntu 的包管理工具
    • apt-get install package_name 安装 package_name
  2. yum - RedHat/CentOS 的包管理工具
    • yum install package_name 安装 package_name
  3. dnf - Fedora 的包管理工具
  4. rpm - 包管理工具
  5. dpkg - Debian 的包管理工具

网络文件系统

  1. mount - 挂载文件系统
  2. umount - 卸载文件系统

用户和群组管理

  1. useradd - 添加用户
    • useradd username 添加新用户 username
  2. userdel - 删除用户
    • userdel username 删除用户 username
  3. groupadd - 添加组
    • groupadd groupname 添加新组 groupname
  4. groupdel - 删除组
    • groupdel groupname 删除组 groupname

服务管理

  1. systemctl - 管理服务
    • systemctl start service_name 启动服务 service_name
  2. service - 管理服务
    • service service_name start 启动服务 service_name

系统信息

  1. uname - 显示系统信息
  2. lsb_release - 显示 Linux 发行版信息
  3. hostname - 显示或设置系统的主机名

定时任务

  1. cron - 定时任务
  2. at - 安排一次性任务

系统备份

  1. rsync - 文件复制和同步
    • rsync -avz source destination 同步 source 到 destination
  2. dd - 数据复制和转换

系统安全

  1. iptables - 防火墙管理
  2. firewalld - 防火墙管理(CentOS 7+)

系统日志

  1. dmesg - 打印或控制内核环形缓冲区
  2. journalctl - 查看和管理系统日志和服务日志
  3. logrotate - 日志文件轮换

脚本和自动化

  1. bash - 运行 Bash 脚本
  2. sh - 运行 Shell 脚本

其他

  1. alias - 创建命令别名
  2. history - 显示命令历史
  3. whatis - 显示命令的简短描述
  4. apropos - 搜索手册页的简短描述
  5. man - 显示手册页 - man command 显示 command 的手册页

文件查找

  1. locate - 快速查找文件(需要事先构建索引)
  2. which - 查找命令的路径

磁盘空间

  1. df - 报告文件系统磁盘空间使用情况
  2. du - 估计文件或目录的磁盘使用空间

网络工具

  1. wget - 非交互式下载文件
  2. curl - 数据传输工具

系统监控

  1. iotop - 显示或累计进程的磁盘 I/O
  2. nmon - 性能监控工具

系统启动

  1. init - 运行不同的运行级别
  2. telinit - 改变运行级别

系统调试

  1. strace - 跟踪系统调用和信号
  2. gdb - GNU 调试器

用户认证

  1. passwd - 更改用户密码
  2. sudo - 以另一个用户身份执行命令

版本控制

  1. git - 分布式版本控制系统

软件包管理(高级)

  1. apt - 高级包管理工具
  2. yum-utils - 添加额外的 YUM 功能

系统配置

  1. sysctl - 读取和设置系统参数
  2. getconf - 显示系统配置变量的值

系统调用

  1. syscall - 直接执行系统调用

系统资源限制

  1. ulimit - 控制 shell 启动进程的资源限制

系统引导

  1. lilo - Linux 引导加载程序
  2. grub - GRand Unified Bootloader

系统服务

  1. service - 运行系统服务
  2. systemd - 系统和服务管理器

系统更新

  1. update - 更新系统软件包
  2. upgrade - 升级系统软件包

系统维护

  1. chkconfig - 管理系统服务的启动和停止
  2. insserv - 检查和链接服务脚本

系统安全(高级)

  1. semanage - 管理 SELinux 安全策略
  2. sestatus - 显示 SELinux 安全状态

系统备份(高级)

  1. bacula - 网络备份解决方案
  2. amanda - 高级 Maryland自动网络磁盘归档器

系统日志(高级)

  1. logwatch - 系统日志分析器
  2. sar - 系统活动报告器

系统监控(高级)

  1. nethogs - 网络带宽使用监控工具
  2. iftop - 实时网络带宽监控工具

系统调试(高级)

  1. valgrind - 内存调试工具
  2. memtest - 内存测试工具

系统资源限制(高级)

  1. setquota - 设置磁盘配额
  2. quota - 显示磁盘配额

系统引导(高级)

  1. dracut - 动态生成 initramfs 的工具

系统服务(高级)

  1. system-config-* - 系统服务配置工具

系统更新(高级)

  1. aptitude - 高级包管理工具

系统维护(高级)

  1. anacron - 定时运行命令

系统安全(高级)

  1. apparmor - 应用程序安全策略

系统备份(高级)

  1. rdiff-backup - 数据备份工具

系统日志(高级)

  1. logrotate - 日志文件轮换

系统监控(高级)

  1. glances - 跨平台系统监控工具

系统调试(高级)

  1. strace - 跟踪系统调用和信号

系统资源限制(高级)

  1. cgroups - 控制组,用于资源限制和优先级管理

系统引导(高级)

  1. bootctl - 引导加载程序配置工具

系统服务(高级)

  1. system-config-services - 系统服务配置工具

系统更新(高级)

  1. zypper - SUSE 的包管理工具

系统维护(高级)

  1. crontab - 定时任务配置工具

系统安全(高级)

  1. firewall-cmd - 防火墙管理工具

系统备份(高级)

  1. duplicity - 文件备份工具

系统日志(高级)

  1. rsyslog - 系统日志服务

系统监控(高级)

  1. collectl - 系统性能监控工具

系统调试(高级)

  1. gdbserver - 远程调试服务器

系统资源限制(高级)

  1. lvm - 逻辑卷管理工具

系统引导(高级)

  1. grub2 - GRUB2 引导加载程序

系统服务(高级)

  1. service - 管理系统服务

系统更新(高级)

  1. dnf - Fedora 的包管理工具

系统维护(高级)

  1. logadm - 日志管理工具

系统安全(高级)

  1. semanage - SELinux 安全策略管理工具

系统备份(高级)

  1. bacula-fd - Bacula 文件守护进程

系统日志(高级)

  1. auditd - Linux 审计系统

系统调试(高级)

  1. perf - Linux 性能分析工具

系统资源限制(高级)

  1. cgroupfs - 控制组文件系统

系统引导(高级)

  1. liloconfig - LILO 配置工具

系统服务(高级)

  1. rc - 运行命令

系统更新(高级)

  1. microcode_ctl - CPU 微代码更新工具

系统维护(高级)

  1. anacron - 定时运行命令

系统安全(高级)

  1. apparmor_parser - AppArmor 安全策略解析器

系统备份(高级)

  1. rsync - 文件复制和同步工具

系统日志(高级)

  1. syslog-ng - 系统日志服务

系统监控(高级)

  1. ganglia - 系统监控工具

系统调试(高级)

  1. ltrace - 跟踪程序执行的动态库函数调用

系统资源限制(高级)

  1. quotacheck - 检查磁盘配额

系统引导(高级)

  1. grub-install - 安装 GRUB 引导加载程序

系统服务(高级)

  1. systemd-analyze - 分析 systemd 启动时间

系统更新(高级)

  1. zypper - SUSE 的包管理工具

系统维护(高级)

  1. atd - 定时任务守护进程

系统安全(高级)

  1. sealert - SELinux 警告管理工具

系统备份(高级)

  1. tar - 打包工具

系统日志(高级)

  1. klogd - Linux 内核日志服务

系统监控(高级)

  1. nagios - 系统监控工具

系统调试(高级)

  1. ab - Apache 基准测试工具

系统资源限制(高级)

  1. quotaon - 启用磁盘配额

系统引导(高级)

  1. lilo - Linux 引导加载程序

系统服务(高级)

  1. systemd-sysv - 转换 SysVinit 脚本到 systemd

系统更新(高级)

  1. dnf-plugin-core - DNF 插件管理工具

系统维护(高级)

  1. logwatch - 系统日志分析器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值