标签:否则 sel ict 详解 cse 另一个 span start nbsp
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)
标签:否则 sel ict 详解 cse 另一个 span start nbsp
原文地址:https://www.cnblogs.com/zhangqing979797/p/9636358.html