1.面向对象 __setitrm__ getitem__
1 class Foo(object): 2 def __init__(self): 3 self.info={} 4 def __setitem__(self, key, value): 5 self.info[key]=value 6 def __getitem__(self, item):#item为key 7 print(item) 8 return self.info[item] 9 obj=Foo() 10 obj["c"]=233#这里只是单纯的作为字典 11 print(obj["c"])
2.面向对象__setattr__,__getattr__
1 class Foo(object): 2 def __init__(self): 3 object.__setattr__(self,"info",{})#模块内部本质的方法 4 def __setattr__(self, key, value): 5 self.info[key]=value 6 def __getattr__(self, item):#这里的item 差不多是key 7 print(item) 8 return self.info[item] 9 obj=Foo() 10 obj.name="alex"#这里是引用过来的 11 print(obj.name)
二 进程
1.进程间不可以传递数据,同时也是有主进程的,默认deamon=flase 主进程完毕可以等待子进程
1 import multiprocessing 2 import threading 3 lst=[] 4 def func(i): 5 # print("验证可不可以数据间") 6 lst.append(i) 7 print( lst) 8 def run(): 9 for i in range(10): 10 t1=multiprocessing.Process(target=func,args=(i,)) 11 t1.start() 12 if __name__ == '__main__': 13 run()
2.进程也可以分为两种写法 一个是引入模块 multiprocseeing ,另一个是继承父类
class Foo(multiprocessing.Process): def run(self): a=multiprocessing.current_process() print("进程 %s" % a) def run(): obj=Foo() obj.start() if __name__ == '__main__': run()
3.进程可以通过queue 和 manager 来进行信息共享
queue 在windows 上可能不会运行
1 import multiprocessing 2 import threading 3 import queue 4 import time 5 q=multiprocessing.Queue() 6 def tesk(i,q): 7 8 q.put=(i)#队列用来限制 9 def run: 10 for i in range(10): 11 t1=multiprocessing.Process(target=tesk,args=(i,q,)) 12 t1.start() 13 while 1: 14 v1=q.get()#这里有一个循环 15 print(v1) 16 if __name__ == '__main__': 17 run()
Manager
用字典的形式阻止
1 def tesk(arg,dic): 2 time.sleep(5) 3 dic[arg]=100 4 if __name__ == '__main__': 5 m = multiprocessing.Manager() 6 dic=m.dict() 7 lst=[] 8 for i in range(10): 9 t1=multiprocessing.Process(target=tesk,args=(i,dic)) 10 t1.start() 11 lst.append(t1) 12 while 1:#用来做一个判断 .否则即使程序运行完事也不结束 13 con=0 14 for i in lst:#这里的i 是每次循环的进程 15 if not i.is_alive():#若果进程不在,说明已经运行完毕,因为子进程还没有结束, 16 #若是提前结束会报错 17 con+=1 18 if con==len(lst):#知道相等才停止 19 break 20 print(dic)
4.进程锁
1 lock=multiprocessing.RLock() 2 def tesk(i): 3 print("鬼子来了") 4 lock.acquire() 5 time.sleep(2) 6 print(i) 7 lock.release() 8 if __name__ == '__main__': 9 t1=multiprocessing.Process(target=tesk,args=(1,)) 10 t1.start() 11 t2=multiprocessing.Process(target=tesk,args=(1,)) 12 t2.start()
5.进程池
1 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor 2 def tesk(i): 3 time.sleep(5) 4 print("真想%s" % i) 5 if __name__ == '__main__': 6 m=ProcessPoolExecutor(5) 7 for i in range(5): 8 m.submit(tesk,i)
6.爬虫初识
import requests# from bs4 import BeautifulSoup#提取一类相似的类型 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor#多线程 # 模拟浏览器发送请求 # 内部创建 sk = socket.socket() # 和抽屉进行socket连接 sk.connect(...) # sk.sendall('...') # sk.recv(...) def task(url): print(url) r1 = requests.get( url=url, headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0' }#模拟谷歌浏览器发送请求 ) # 查看下载下来的文本信息 soup = BeautifulSoup(r1.text,'html.parser') print(soup.text) content_list = soup.find('div',attrs={'id':'content-list'}) for item in content_list.find_all('div',attrs={'class':'item'}): title = item.find('a').text.strip() target_url = item.find('a').get('href') print(title,target_url) def run(): pool = ThreadPoolExecutor(5) for i in range(1,50): pool.submit(task,'https://www.cnblogs.com/qq849784670/p/9578990.html') if __name__ == '__main__': run()