進程中的鎖以及進程池

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)#五.############################## #
相關文章
相關標籤/搜索