线程锁

线程锁

线程同步:当多个线程同时进行任务时,为了保证不会有多个线程同时对同一个数据进行操作造成不可预料的后果,所以有了锁的概念,我们通过锁来使多线程任务更安全

lock=threading.Lock()

cond=threading.Condition(lock=lock)

Condition:更精确的控制锁,提供了四个方法

上锁(acquire()),等待(wait()),解锁(release()),唤醒(notify(),notify_all())

 

import threading
import time

class Thread1(threading.Thread):
def run(self):
for i in range(1,11):
if i==3:
cond.acquire() #上锁
cond.wait() #等待
cond.release() #解锁
print(i)
time.sleep(1)

class Thread2(threading.Thread):
def run(self):
for i in range(30,19,-1):
print(i)
time.sleep(1)
cond.acquire() #上锁
cond.notify() #唤醒
cond.release() #解锁

lock = threading.Lock()
cond = threading.Condition(lock=lock)
t1 = Thread1()
t2 = Thread2()
t1.start()
t2.start()

 

 

生产者与消费者实例

 

 

import threading
import time
lock = threading.Lock()
HuoFuCond = threading.Condition(lock=lock)
lock2=threading.Lock()
ChiHuoCond = threading.Condition(lock=lock2)
list=[]
class HuoFu(threading.Thread):
def run(self):

while True:
ChiHuoCond.acquire()
for i in range(1,11):
list.append(i)
print(“伙夫生产第{0}个馒头”.format(i))
time.sleep(0.2)
#等待
HuoFuCond.acquire()
ChiHuoCond.notify_all()
ChiHuoCond.release()
HuoFuCond.wait()
HuoFuCond.release()

ManTou=None
class ChiHuo(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.name=name
def run(self):
while True:
ChiHuoCond.acquire()
if len(list)==0:
HuoFuCond.acquire()
HuoFuCond.notify()
HuoFuCond.release()
ChiHuoCond.wait()
ChiHuoCond.release()
ChiHuoCond.acquire()
if len(list)>0:

ManTou=list.pop()
print(“{0}再吃第{1}个馒头”.format(threading.current_thread().name,ManTou))
time.sleep(0.2)
ChiHuoCond.release()
hf=HuoFu()
haha=ChiHuo(“哈哈”)
heihei=ChiHuo(“嘿嘿”)
hehe=ChiHuo(“呵呵”)
hf.start()
haha.start()
heihei.start()
hehe.start()

python xml

xml:(在框架  常用在配置文件)

1、标签成对出现

2、区分大小写

3、标签要正确嵌套

4、开始部分<?xml version=”1.0″ encoding=”utf-8″?>

5、只能有一个根节点

6、节点可以有属性

DTD(Document Type Definition):约束XMl文件的节点

<!DOCTYPE library [

<!ELEMENT library (book+)>

<!ELEMENt  book (name,price,author)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT price(#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ATTLIST book id CDATA #REQUIRED>        (#REQUIRED’必须的’ 、#IMPLIED’不是必须的’、#FIXED’属性值是固定的’)

]>

 

  1. <library>
  2. <book id=“1”>
  3. <name>呵呵</name>
  4. <price>10rmb</price>
  5. <author>哈哈王</author>
  6. </book>
  7. <book id=“2”>
  8. <name>嘿嘿</name>
  9. <price>20rmb</price>
  10. <author>还是哈哈王</author>
  11. </book>
  12. </library>

 

特点:容易阅读 通用性强

XML解析

1、dom(文档对象模型):把解析的xml整个加载到内存,组织成object树。

w3cDom dom4j

2、sax:事件驱动式解析,不会再内存中加载整个文档,只会根据自己编写的事件保存数据。

dom解析案例

 

from xml.dom.minidom import parse
class Book(object):
def __init__(self,name=None,price=None,author=None):
self.name=name
self.price=price
self.author=author
def __str__(self):
return self.name+’\t’+self.price+’\t’+self.author
library=[]
doc=parse(“library.xml”)
print(doc)
#得到跟节点
root=doc.documentElement
print(root)
book=root.getElementsByTagName(“book”)
for b in book:
name=b.getElementsByTagName(“name”)[0].childNodes[0].data
price=b.getElementsByTagName(“price”)[0].childNodes[0].data
author=b.getElementsByTagName(“author”)[0].childNodes[0].data
print(name,price,author)
library.append(Book(name,price,author))
print(“书名:\t价格:\t作者:”)
for i in library:
print(i)

文件 file

文件:读取,写入

流:stream      按字节读取:字节流 ;按字符读取:字符流    ;   缓存流

输入流 Input

输出流 Output

1.创建文件对象(路径,文件名)

2.读取

3.关闭

file.close() 关闭文件。关闭后文件不能在进行操作。

file.flush()  刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件

file.fileno()  返回一个整形的文件描述符(file descriptor FD整形)

file.next()  返回文件下一行

file.read([size])  从文件读取指定的字节数

file.write()将字符串写入

 

获取文件后缀

def getfile_fix(filename):getfile_fix 文件名):
     return filename [filename.rfind('。')+ 1:]返回文件名[ 文件名rfind '。' )+ 1 :]
打印(getfile_fix( 'runoob.txt'))打印getfile_fix 'runoob.txt' ))

爬取网页源代码
   1、from urllib import request
   2、request=request.urlopen("http://www.baidu.com/")
   3、fi=open("project.txt",'w')
   4、page=fi.write(str(request.read()))
   5、fi.close()
os命令
  1. import os
  2. #os.mkdir(“haha”) #创建文件夹
  3. # os.rmdir(“haha”) #删除文件夹
  4. # os.rename(“os.py”,”os命令.py”) #重命名文件或文件夹
  5. # print(os.getcwd()) #获取路径
  6. # print(os.listdir(“./”)) #获取路径内所有文件