深入python

5/23/2022 python🐍

📌Tip

深入这个概念和大数据是一样的,多深入才叫深入?
这里会放一些自觉比较深的知识点和技巧,有些时候会和踩坑联动

深入python

# GC原理剖析

^08132d

#TODO GC看这里 Python垃圾回收机制!非常实用 - 知乎 (opens new window)
记一次面试问题——Python 垃圾回收机制 · TesterHome (opens new window)

2小时吃透python内存管理和垃圾回收机制_哔哩哔哩_bilibili (opens new window)

# 环形数据结构

著名的环形引用 Python 如何在环状数据结构中管理内存 - i'm jackey - i'm jackey (opens new window)

# 大数据技巧

#TODO 早晚有一天移动到大数据

# 布隆过滤器

实现

# 普通技巧

# 网络编程详解

# twisted

# gevent

# 函数式编程

# 函数式编程思想

📌Tip

这里就不局限于python了,只是我用的顺手拿python当例子,思想是通用的

可以配合CS61A视频

# python的函数式编程

# 异步进阶

^347f89

异步的内容其实还有很多,这里只放已经收集到的
gevent的缺点,使用C实现底层协程,使用猴子将普通库打补丁,会导致有些错误无法捕捉

# 多线程异步

有些时候外部接口只提供了阻塞方法,没有提供异步方法,还是需要使用线程
申请一个线程池,

Click to see more
import asyncio,time,random  
from concurrent.futures import ThreadPoolExecutor  
import socket  
from urllib.parse import urlparse  
  
def func(a):  
    # 阻塞方法  
    t=random.randint(0,5)  
    print("arg is %s"%i)  
    print("start sleep %s"%t)  
    time.sleep(t)  
    print("end sleep %s"%t)  
  
if __name__ == "__main__":  
    start_time = time.time()  
  
    loop = asyncio.get_event_loop()  
    executor = ThreadPoolExecutor(3) # 申请线程池  
    tasks = []  
    for i in range(0,20):  
        task = loop.run_in_executor(executor, func, i)  
        # 注意协程的这个函数,传入的是executor,返回是封装的Future对象,可以直接放在协程中使用  
        tasks.append(task)  
    loop.run_until_complete(asyncio.wait(tasks))  
  
    print("last time:{}".format(time.time()-start_time))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

运行结果

arg is 0
start sleep 4
arg is 1
start sleep 4
arg is 2
start sleep 3
end sleep 3
arg is 19
start sleep 3
end sleep 4
end sleep 4
...
1
2
3
4
5
6
7
8
9
10
11
12

❌Failure

这段代码debug的时候循环的参数就是正常 的0-19,直接运行前一两个正常,后面的全是19
非常离谱,兄弟

#TODO debug正常run不正常的异步多线程

# 多进程异步

# 混合编程