话说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提供了很多线程同步原语,如时间,锁等。“当这些选项存在时,最佳实践是转而关注于使用队列。相比较而言,队列更容易处理,并且可以使得线程编程更加安全,因为它们能够有效地传送单个线程对资源的所有
相关文档:
自己遇到的一个问题, WestGeco的3D地震数据, 提取导航数据:
#!/bin/env python
import sys
import struct
try:
f=open(sys.argv[1],'rb')
except (IOError,Exception):
print '''usage:
scriptname segyfilename
'''
&nbs ......
今天是第二天自己看关于Python了,看见一个Python2写的百度词典,我也用Python 3 写了一个。真的很小巧,呵呵,很好的语言。
不知道怎么上传代码格式的,就上传文本了:
# -*- coding: utf8 -*-
import urllib.parse
import urllib.request
def search(word):
#word = input("输入你要查询的 ......
Python MySQLdb 查询返回字典结构 smallfish
MySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.DictCursor就行。
默认程序:
import MySQLdb
db = MySQLdb.connect(host = 'localhost', user = 'root', passwd = '123456', d ......
import types
type(x) is types.IntType # 判断是否int 类型
type(x) is types.StringType #是否string类型
.........
--------------------------------------------------------
超级恶心的模式,不用记住types.StringType
import types
type(x) == types(1) # ......