话说Python(六)小白的胜利
“哈哈!知道我操作之王小白的厉害了吧!”
每当周六晚上,小白总是要跟宿舍的弟兄挑几局魔兽。凭借着风骚的走位和猥琐的意识,小白总是笑道最后。这不,小白又一次取得了以一敌二的胜利。
“主要是多线操作!”这是小白对自己胜利的总结。
今天我们就要学习多线程,看看小白是怎样胜利的。
首先我们要澄清的是Python的多线程并不是利用系统本身的多线程机制,而是基于Python解释器,实际在系统看来还是一个线程。在Python中,存在一个Global Interpreter Lock(GIL),即全局解释器锁,它的作用在于让同一时刻只能有一个线程对于python对象进行操作。所以Python的多线程无法充分利用多核CPU,甚至单核CPU,这可以说是解释语言的通病。有时可以通过创建多个进程(而不是线程),或者使用Jython版本来解决。
多线程带来的缺点:1、代码编写难度加大,多线程之间的抢占容易产生错误,出现异常;2、线程之间的切换同样会加大CPU和内存的负担。
无论如何,多线程还是值得一学的,因为它有一个不可忽视的优点:执行速度快,切记不能滥用。多线程主要应用在I/O密集型的程序中,因为在输入输出函数会更多地调用内建的C级代码,而不是Python级代码。
我们要学习的模块是threading,而不是thread,因为threading更为高级。推荐使用继承threading.Thread类来创建线程。
hello world 线程版:
import threading
class WorkerThread(threading.Thread): #继承自Thread
def __init__(self):
threading.Thread.__init__(self) #继承Thread构造函数
def run(self): #重写run()函数
print("hello world!")
if __name__=="__main__":
myThread=WorkerThread() #创建对象
myThread.start() #start()方法会自动运行run()
调用start()方法后,线程就会自动运行,连续创建多个对象就会变成多线程。
上文提到,多线程的一个缺点是对共享的数据抢占造成程序错误。Python提供了很多线程同步原语,如时间,锁等。“当这些选项存在时,最佳实践是转而关注于使用队列。相比较而言,队列更容易处理,并且可以使得线程编程更加安全,因为它们能够有效地传送单个线程对资源的所有
相关文档:
用Python提取文件夹下的特定扩展名的文件
不知道什么时候,网闲着没用,挂了个linux的视屏教程,里面有很多个文件夹,有很多无关的文件。这对于像我没收藏垃圾文件癖好的人来说,简直是 ......
英文版Dive in python可以在下面找到中文翻译http://linuxtoy.org/docs/dip/toc/index.html
模块的__name__,当模块被import时,其为模块的名字,当模块作为main执行的时候,其为__main__
词典的key是大小写敏感的。
List也支持重载+操作,用于将两个list连接起来,并返回一个List,因此它没有extended执行高效。list也+ ......
前一篇文章写的在APACHE安装MOD_PYTHON的经过,其实挺简单,就是版本不兼容的问题.这次我大概说下部署DJANGO的过程.
先修改APACHE配置文件,使其加载mod_python模块
LoadModule python_module libexec/mod_python.so
运行命令查看
bin/httpd -M可以看到
python_module (shared)
Syntax OK
说明apache已经成功加 ......
python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。
有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码,转换过程是这样的:
原有编码 -> 内部编码 ->
目 ......