python异步并发模块concurrent.futures,主要用来实现多线程和多进程的异步并发。
代码示例:
from concurrent import futures
def test(num):
import time
return time.ctime(),num
with futures.ThreadPoolExecutor(max_workers=1) as executor:
future = executor.submit(test,1)
print future.result()
>>>
('Tue Jan 17 15:23:10 2017', 1)
如果是多进程的话,可使用ProcessPoolExecutor。由于python是解释语言的关系,多线程设计基本就是残废状态,因此,通常情况下,不要使用多线程,请使用多进程
参考:
http://lovesoo.org/analysis-of-asynchronous-concurrent-python-module-concurrent-futures.html
python异步并发模块concurrent.futures简析
https://mp.weixin.qq.com/s/QIfxxY6z7y77RDE_8gDEIg
并行运算Process Pools
http://www.cnblogs.com/Python666/p/7506546.html
Python单例模式
https://mp.weixin.qq.com/s/tJsdM-4q_RC-5AhTw3y49w
schedule使用进阶
https://mp.weixin.qq.com/s/fwa3cbDI0fIjjztA60XuUQ
同步与异步Python有何不同?
https://mp.weixin.qq.com/s/0tLI_UNhpD-UPa9o206xFA
为什么Python多线程无法利用多核
https://mp.weixin.qq.com/s/6zVU6i75hZ3ZXZAmW0G5Mw
非常适合小白的Asyncio教程
https://mp.weixin.qq.com/s/nHIQ5uwxZM-9DbSu_jL6DQ
异步Python比同步Python快在哪里?
https://mp.weixin.qq.com/s/0MMUTp_-JF97inzeJd4j1g
详解如何用Multiprocessing进行并行计算
mypy是一个针对python语言的静态类型检查工具。
官网:
http://www.mypy-lang.org/
参考:
https://mp.weixin.qq.com/s/dBK8x_WajI2A3L5v6OQEgA
四年完成400万行Python代码检查,甚至顺手写了个编译器
glob的历史可以追溯到早期的UNIX系统。用它可以查找符合特定规则的文件路径名。
参考:
https://blog.csdn.net/csapr1987/article/details/7469769
python glob模块
https://mp.weixin.qq.com/s/suUXM4Tdj6ekKQWC0g04Yg
glob-被忽略的python超强文件批量处理模块
Python Lex-Yacc是一个python版本的lex/yacc实现。
官网:
http://www.dabeaz.com/ply/
参考:
https://blog.csdn.net/feixiaoxing/article/details/79123776
python编程(ply库)
https://blog.csdn.net/chosen0ne/article/details/8077880
Python语法解析器PLY——lex and yacc in Python
JPype是一个能够让python代码方便地调用Java代码的工具。官网:
https://sourceforge.net/projects/jpype/
参考:
http://blog.csdn.net/niuyisheng/article/details/9002926
JPype:实现在python中调用JAVA
http://www.cnblogs.com/yu-zhang/p/3817024.html
python调用java程序–jpype
Simplified Wrapper and Interface Generator可以为C/C++的库生成其他高级脚本语言的Wrapper。
官网:
http://swig.org/
PLY和SWIG的作者都是David Beazley。
David M. Beazley,犹他大学博士。IEEE Gordon Bell Prize(1993,1998)。先后在Los Alamos和University of Chicago工作执教。超算领域专家。python语言核心开发者。
Sly Lex Yacc是David Beazley的新作,号称新一代的PLY。
官网:
https://sly.readthedocs.io/en/latest/
和SWIG功能类似的替代品。
官网:
https://cython.org/
示例:
https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/python/cython
编译:
python setup.py build_ext --inplace
运行:
>import hello
>hello.say_hello()
参考:
https://mp.weixin.qq.com/s/ODA74xgoS8X1HFxp4BfshQ
如何将Python自然语言处理速度提升100倍:用spaCy/Cython加速NLP
https://mp.weixin.qq.com/s/1Iyhsp5-2DyTfOb0JzqLZg
比Python快100倍,利用spaCy和Cython实现高速NLP项目
https://mp.weixin.qq.com/s/l-zmvQvmosw81G1wFCIDbQ
用Cython造个轮子
.pyc: 编译好的二进制文件。
.pyx: python的c扩展文件,代码要符合cython的规范
.pyd: 编译好的cython动态库,仅在Windows平台有,Linux平台生成.so文件。
参考:
https://blog.csdn.net/sislcb/article/details/4002414
py文件编译为pyc
https://www.cnblogs.com/kaituorensheng/p/4452881.html
Cython学习
https://mp.weixin.qq.com/s/_fi4fpfN8Whe7_ZpkPL0tA
怎么给Python写C扩展?
https://mp.weixin.qq.com/s/eqNaX0YorcaMN8D9lnQprw
简单上手一波Cython
http://gashero.yeax.com/?p=38
使用C/C++扩展Python
Pythran是一个transpiler,可以把Python的prototype转到C++。
官网:
https://pythran.readthedocs.io/en/latest/
参考:
https://mp.weixin.qq.com/s/hJGaREpBP0j7rqCXSZQMvA
把Python自动翻译成C++
pybind11可以在C++11和Python之间建立互操作的关系,而且还是个header-only的方案。
pybind11的灵感来源于Boost.Python,但是后者属于Boost的一部分,使用起来太笨重。
官网:
https://pybind11.readthedocs.io/en/stable/
安装:
pip3 install pybind11
示例:
https://github.com/pybind/cmake_example
手动添加wrapper太麻烦。目前有一些开源项目,专门用来针对已有的C++代码来自动生成pybind11绑定代码:
参考:
https://github.com/tensorflow/community/blob/master/rfcs/20190208-pybind11.md
pybind11 vs SWIG
https://zhuanlan.zhihu.com/p/52619334
使用pybind11将C++代码编译为python模块
https://zhuanlan.zhihu.com/p/192974017
pybind11的最佳实践
https://zhuanlan.zhihu.com/p/666269440
PyBind11简明教程
众所周知,GTK库是用C语言编写的,其相关的文档提供的也是C函数的接口,python接口的文档相对较少,获得也不太容易。因此有必要掌握一下这方面基本的命名规则。(这里只讲方法,对深层次的调用原理不做探究。)
1)类初始化函数
C:GtkWidget * gtk_button_new (void);
python:button = Gtk.Button()
这里除了把C函数式的写法,替换成python的类的写法之外,并无其他差异。
2)普通类成员函数
C:void gtk_container_add (GtkContainer *container, GtkWidget *widget);
python:button.add(image)
可以看出,C函数的第一个表示self类指针的参数被省略掉了。
3)回调函数
这里以按钮的click事件回调为例:
C:void user_function (GtkButton *button, gpointer user_data)
python:
button.connect("clicked", self.playToggled)
def playToggled(self, w):
这里的情况要复杂的多。首先在事件回调注册的时候,由于我们并没有给user_data赋值,因此照理说playToggled函数,只有button这一个参数。但实际传递给playToggled函数的有两个参数,self是一个用于占位的参数,w对应button,没有东西对应user_data。
4)用于输出的参数
C:void gst_message_parse_error (GstMessage *message, GError **gerror, gchar **debug);
python:err, debug = message.parse_error()
这个例子中的gerror和debug都是用于输出的参数。如果只想得到其一,还可用以下方法:
debug = message.parse_error()[2]
5)枚举类型
C:
enum GstSeekFlags
{
GST_SEEK_FLAG_FLUSH,
...
}
python:Gst.SeekFlags.FLUSH
6)宏常量
C:#define GST_CLOCK_TIME_NONE ((GstClockTime) -1)
python:Gst.CLOCK_TIME_NONE
7)类型转换
大多数情况下,类型转换自动完成,并无什么问题。这里只讨论特殊的情况。
C:
gst_element_seek (pipeline, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
GST_SEEK_TYPE_SET, time_nanoseconds,
GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE))
python:
self.player.seek(1.0, Gst.Format.TIME, Gst.SeekFlags.FLUSH, Gst.SeekType.SET,\
time_nanoseconds, Gst.SeekType.NONE, Gst.CLOCK_TIME_NONE)
这里首先按照一般的方法,将C代码转化成python代码。但是运行之后,产生如下错误:
OverflowError: long too big to convert
究其原因,gst_element_seek的最后一个参数是uint64类型的。但python原生并不支持该类型,而是将之转换成int类型(实际上是int64类型),这样的话,GST_CLOCK_TIME_NONE的值显然超出了int64所能表示的范围。
解决的办法是使用ctypes库,将
Gst.CLOCK_TIME_NONE
改为
c_long(Gst.CLOCK_TIME_NONE).value
Django是一个Web框架。
官网:
https://www.djangoproject.com/
中文教程:
https://www.runoob.com/django/django-tutorial.html
安装:
sudo pip install Django
参考:
https://mp.weixin.qq.com/s/-CaMHjsY580et8Hh_D2FSg
简约而不简单的Django新手图文教程
http://www.liujiangblog.com/course/django/
Django教程
Django比较重量级了,如果只是想发布静态网页的话,可以用:
python -m SimpleHTTPServer 7800
或者
python3 -m http.server 7800
除此之外,Flask、tornado也是较常用的Web框架。
Flask底层使用的werkzeug库,是一个有名的WSGI工具包。
基于python新增的async/await语法的异步Web框架,是最近的新流派,代表有:Sanic
https://juejin.cn/post/6944598601674784775
异步Web框架Sanic凭什么比Django Flask强?
代码示例:
https://github.com/antkillerfarm/antkillerfarm_crazy/blob/master/python/misc/hello_eml.py
这个示例主要使用email包来解析eml文件。
同时为了处理其中的html的内容,还用到了Beautiful Soup包。其网址为:
https://www.crummy.com/software/BeautifulSoup/
参见:
https://mp.weixin.qq.com/s/p86yvl3uAm3FXw4V9NlNoA
一文带你上手Python网页抓取神器BeautifulSoup库
https://mp.weixin.qq.com/s/3o_T7Tyrstur6jkj0gexMA
BeautifulSoup的使用
https://mp.weixin.qq.com/s/fBz__E2Xu4GC7w1Uqx5NAA
手把手教你如何用Python从PDF文件中导出数据
https://mp.weixin.qq.com/s/xCKC3cz7jUvrwl4uvMNKTA
20行Python代码教你批量将PDF转为Word
https://mp.weixin.qq.com/s/IznKbG3cEF6uxP0Fe_0oaQ
印度小哥“神剑”:PDF提取表格so easy!
https://mp.weixin.qq.com/s/J-H638ZzhB-GOXMeAQ9aww
Camelot: 三行代码提取PDF表格数据
https://mp.weixin.qq.com/s/c0hszsSDS-u4z-83Y7km8Q
pdf文档解析之pdfminer
https://mp.weixin.qq.com/s/1BoBHbXXOGPZ4HK437lH4Q
6款Python特殊文本格式处理库推荐
https://mp.weixin.qq.com/s/bz7rCy0YyF1HrrHrWt9Mpw
聊聊Python操作PDF的几种方法
https://mp.weixin.qq.com/s/jzjumS2oJfFO-4SBa0qooQ
利用Python将PDF文档转为MP3音频
https://mp.weixin.qq.com/s/FmdbdAWenXWuY9s7ykVORQ
三种方法,Python轻松提取PDF中全部图片
https://mp.weixin.qq.com/s/UVKOU11dfWwP9Uyw9E400Q
如何使用python提取pdf表格及文本,并保存到excel
您的打赏,是对我的鼓励
请访问这里提交评论