上午又看了一堆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[i], locks[i])) #这里是开始一个线程start_new_thread允许调一个函数,并带进参数 for i in nloops: while locks[i].locked(): pass #非常傻的主线程,无限循环等解锁,这时CPU100%啊 print 'all DONE at:', ctime() if __name__ == '__main__': main()
|
总得来说,感觉样例程序有点傻。
明天看18.5章threading
阅读(1419) | 评论(0) | 转发(0) |