1. 進程
2. 數據共享
3. 鎖
4. 進程池
5. 模塊(爬蟲)
- requests
- bs4(beautifulsoup)
6. 協程linux
# 1.類的特殊方法的補充# (1)對象名.xxx 執行類中的__getattr__方法# (2)對象名.xxx=xxx 執行類中的__setattr__方法# class Foo(object):# info={}# def __init__(self,name):# self.name=name #初始化方法的本質是執行的object類中的__steattr__方法# def __setattr__(self, key, value):# self.info[key]=value# def __getattr__(self, item):# return self.info[item]# obj=Foo('lisa')# obj.age=18# print(obj.info)# print(obj.age)# 一.進程# 1.進程間數據不共享# import multiprocessing# data_list=[]# def task(arg):# data_list.append(arg)# print(data_list)# def run():# for i in range(1,11):# p=multiprocessing.Process(target=task,args=(i,))# p.start()# if __name__ == '__main__':# run()# 2.經常使用功能:# 主進程默認等子進程執行完畢# import time# import multiprocessing# data_list=[]# def task(arg):## data_list.append(arg)# time.sleep(2)# print(data_list)# def run():# for i in range(1,11):# p=multiprocessing.Process(target=task,args=(i,))# p.start()# p.join()# if __name__ == '__main__':# run()# (1)daemon,主進程再也不等子進程執行結束# import time# import multiprocessing# data_list = []# def task(arg):# data_list.append(arg)# time.sleep(2)# print(data_list)# def run():# for i in range(1,11):# p = multiprocessing.Process(target=task, args=(i,))# p.daemon=True #此處進程與線程的寫法再也不相同,不是括號中寫布爾值了# p.start()# if __name__ == '__main__':# run()# (2)join沒有參數,主進程默認等子進程執行完畢再往下走# import time# import multiprocessing# data_list = []# def task(arg):# data_list.append(arg)# time.sleep(2)# print(data_list)# def run():# for i in range(1,11):# p = multiprocessing.Process(target=task, args=(i,))# p.start()# p.join()# print('執行完了')# if __name__ == '__main__':# run()# 運行結果:#[1]# 執行完了# [2]# 執行完了# [3]# 執行完了# [4]# 執行完了# [5]# 執行完了# [6]# 執行完了# [7]# 執行完了# [8]# 執行完了# [9]# 執行完了# [10]# 執行完了## (3)join有參數,讓主進程在這裏最多等待幾秒,不管是否執行完都會繼續往下走# import time# import multiprocessing# data_list = []# def task(arg):# data_list.append(arg)# time.sleep(2)# print(data_list)# def run():# for i in range(1,11):# p = multiprocessing.Process(target=task, args=(i,))# p.start()# p.join(1)# print('執行完了')# if __name__ == '__main__':# run()# 運行結果:# 執行完了# 執行完了# [1]# 執行完了# [2]# 執行完了# [3]# 執行完了# [4]# 執行完了# [5]# 執行完了# [6]# 執行完了# [7]# 執行完了# [8]# 執行完了# [9]# [10]# (4)進程名稱:與線程不一樣的是再也不是setname,getname,直接name# import time# import multiprocessing# data_list = []# def task(arg):# data_list.append(arg)# p=multiprocessing.current_process()# name=p.name# time.sleep(2)# print(name,data_list)# def run():# p = multiprocessing.Process(target=task, args=(1,))# p.name='去玩兒'# p.start()# print('執行完了')# if __name__ == '__main__':# run()# 3.與線程相同的是除了正常import multiprocessing寫線程,還能夠用類繼承的方法建立進程# import multiprocessing# class MyProcess(multiprocessing.Process):# def run(self):# print('當前線程名稱%s' % multiprocessing.current_process())# def task():# p1=MyProcess()# p1.start()# p2 = MyProcess()# p2.start()# if __name__ == '__main__':# task()#二.進程間數據共享# Queue# linux:# import multiprocessing# q=multiprocessing.Queue()# def task(arg):# q.put(arg)# def run():# for i in range(10):# p=multiprocessing.Process(target=task,args=(i,))# p.start()# while 1:# print(q.get())# run()# windows:# import multiprocessing# def task(arg,q):# q.put(arg)# if __name__ == '__main__':# q = multiprocessing.Queue()# for i in range(10):# p=multiprocessing.Process(target=task,args=(i,q))# p.start()# while 1:# print(q.get())#1.Manager# Linux# import multiprocessing# m=multiprocessing.Manager()# dic=m.dict() #一個特殊的字典,是全部進程共享的# def task(arg):# dic[arg]=100# def run():# for i in range(10):# p=multiprocessing.Process(target=task,args=(i,))# p.start()# while 1:# print(dic.items())# run()# Windows# import time# import multiprocessing# def task(arg,dic):# dic[arg]=arg# if __name__ == '__main__':# m = multiprocessing.Manager()# dic = m.dict()#會寫到一個文件中# def run():# for i in range(10):# p=multiprocessing.Process(target=task,args=(i,dic))# p.start()# run()# time.sleep(10) #若是不加這句,有可能主進程結束了,子進程尚未結束,主進程結束了,文件就刪除了,子進程就沒法找到文件,因此會報錯# print(dic)##三,進程鎖(進程間存在數據共享的時候纔有必要加鎖)# import time# def task(arg,lock):# lock.acquire()# time.sleep(1)# print(arg)# lock.release()# if __name__ == '__main__':# import multiprocessing# lock = multiprocessing.RLock()# def run():# for i in range(1, 11):# p = multiprocessing.Process(target=task, args=(i,lock,))# p.start()# run()#四.進程池# import time# from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor# def task(arg):# time.sleep(1)# print(arg)# if __name__ == '__main__':# pool=ProcessPoolExecutor(5)# for i in range(16):# pool.submit(task,i)#五.############################## #