进程详解

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()
原文地址:https://www.cnblogs.com/zhangqing979797/p/9636358.html