Python之线程

关于GIL

Python(特指CPython)的多线程不能利用多核的优势,这是因为全局解释锁(GIL)的限制。如果是cpu密集型(计算型)的任务,使用多线程GIL就会让多线程变慢。
GIL是必须的,这是Python设计的问题:Python解释器是非线程安全的。这意味着当从线程内尝试安全的访问Python对象的时候将有一个全局的强制锁。 在任何时候,仅仅一个单一的线程能够获取Python对象或者C API。每100个字节的Python指令解释器将重新获取锁,这(潜在的)阻塞了I/O操作。因为锁,CPU密集型的代码使用线程库时,不会获得性能的提高(但是当它使用之后介绍的多进程库时,性能可以获得提高)。

阅读全文

Python之_magic变量和函数

关于下划线(_)的说明

  • 单下划线开头:弱内部使用标识,无法被from M import *所引用
  • 单下划线结尾:避免和python关键字冲突,可以加个后置下划线,如exec_()

阅读全文

Python之Pandas入门

这是一个简短的为新手入门的pandas教程,更高级的用法请查看ccokbook
这里安装numpy, mayplotlit 和 pandas省略.首先导入如下包

1
2
3
4
5
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: import matplotlib.pyplot as plt

阅读全文

Python之Numpy使用

Numpy相关介绍

NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。
使用NumPy,开发人员可以执行以下操作:

阅读全文

Python之asyncio使用

asyncio简介

asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。
asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoop中执行,就实现了异步IO。

阅读全文