python笔记

上午又看了一堆PDF,还有几个事没搞定。
一是要研究一下线程打开URL的事,昨天的程序有些问题,要改良下,光开线程没负责及时关闭,还有就是要设计个抓取成功的判断,准备用这个来当作公司网站是否可用的定时监控作业。
晚上继续开始看,看了核心编程第二版,随便google一下,发现这本书是CPUG翻译的,而被一个家伙偷偷署了自己名出实体书,鄙视一把。本来还有冲动想买本实体书的(虽然我一看实体书就困)
18章是讲线程的
怪异,书上说不要用thread模块,尽量用threading,一头雾水,二者有多大区别呢?
我越来越感觉到看python的代码是一件很痛苦的事,原因是绝大多数网上的代码,包括PDF里的代码格式都会乱掉,而python非常强调缩进,真是#(*$()*@,我几乎就是排版员了。
整了一会终于把这个排清楚了,这个是唯一的核心编程里用thread模块的样例,排版错误的话可能会CPU一直100%的哦。

#!/usr/bin/env python
import thread
from time import sleep, ctime
loops = [4,2] #定义二个线程中sleep的时长
def loop(nloop, nsec, lock): #定义了个函数封装起来,nloop是线程代号,nsec是时长,lock是让指定的锁解开
    print 'start loop', nloop, 'at:', ctime()
    sleep(nsec)
    print 'loop', nloop, 'done at:', ctime()
    lock.release() #主要就是这个,有点意思
def main():
    print 'starting at:', ctime()
    locks = []
    nloops = range(len(loops)) #取得线程的数量
    for i in nloops:
        lock = thread.allocate_lock() #说用这个来创建一个锁的列表,没有太明白
        lock.acquire() #分别调用这个函数来获得锁,还是没明白
        locks.append(lock) #这个就是锁上了,回头看了一遍明白了,原来是先把每个线程都锁上,然后lock.release()来同是解开让线程一起跑啊
    for i in nloops:
        thread.start_new_thread(loop, (i, loops, locks)) #这里是开始一个线程start_new_thread允许调一个函数,并带进参数

    for i in nloops:
        while locks.locked(): pass #非常傻的主线程,无限循环等解锁,这时CPU100%啊
    print 'all DONE at:', ctime()
if __name__ == '__main__':
    main()
总得来说,感觉样例程序有点傻。
明天看18.5章threading