一些每个 python 程序员都该知道的事实
在PEP0703通过前,不要期待进程之间能够高效的传输数据或者使用多线程来使用多核能力
1 的例外是,你共享的数据是定长的数据结构,那你可以使用 shared_memory
在 Python 进程间大量传输数据会造成大量开销
Jupyter 在运行并行或异步等操作时,已经得到了很好的支持。例如 accelerate 的 notebook launcher 或者 await
Python 是按照共享对象传递,这句话的意思是,当你赋值或使用单进程的函数传递参数时
- 对于一个不可变对象 - 例如元组、字符串,在改变的时候你创建了了一个新对象
- 对于一个可变对象 - 例如列表、类实例,你是在原对象的基础上进行操作
当你遇到了很难解决的工程性性能问题时,例如:
- 想要在多个进程之间共享对象
- 想要减少内存开销 也许你需要的是换一种语言,比如 rust
你应该准备本地文件大小 10 倍的内存来读取这个文件
永远不要期待 gc 语言会释放已经占用的内存
不要给只写一次的 IO 对象加上 buffer
什么是惰性求值:简单来说就是,不在表达式处立即计算或阻塞,而是在之后用到再阻塞,例如:
value = f() 没有阻塞
print(value) 阻塞
比起 CPU 性能、IO 可能更需要考虑,尤其是随机读写机械硬盘的时候
一些有意思的库:
- smart-open,自动为文件选择适合的 open 方法 ( gzip 等)
- func_parse,根据函数签名为你生成命令行 parser
Last modified on 2024-01-14