深入python

ooowl
  • python🐍
  • python🐍
About 3 min

📌Tip

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

深入python

深入理解 Python 异步编程(上) · GitHubopen in new window

GC原理剖析

^08132d #TODO GC看这里 Python垃圾回收机制!非常实用 - 知乎open in new window
记一次面试问题——Python 垃圾回收机制 · TesterHomeopen in new window
2小时吃透python内存管理和垃圾回收机制_哔哩哔哩_bilibiliopen in new window

环形数据结构

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

编译器相关扩展了解

如果以后接触C的话可能就会再深入了解源码和python的机制
python语言编译原理相关的杂谈bilibiliopen in new window

网络编程详解

异步进阶

^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"%a)  
    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))

运行结果

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
...

协程模块asyncio和gevent的基本使用_Generalzy的博客-CSDN博客open in new window

多进程异步

这才是重点,因为GIL的原因多线程和异步没有耦合的必要,但是多进程+协程可以榨干CPU

twisted

gevent

混合编程

起初是一个同学然你给我帮他java调用python,python调java,发现并不是很好用
go建议直接RPC

java混合编程

C混合编程

热加载

python程序的热加载还是程序的热加载?

pythonic的约定

Pythonic的方式全方位提升Python技能open in new window

python中一切皆对象的本质open in new window # py的对象底层

Loading...