• 进程详解


    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()
  • 相关阅读:
    《将博客搬至CSDN》
    2015-05-01 至 2015-07-30错误总结
    2015-01-01至2015-04-30错误积累
    2015-07-30 至 2016-03-16错误Note
    2014-11-21错误总结
    Spring 和 SpringMVC 的区别
    spring 容器加载
    Spring注解
    自定义拦截器
    Js闭包
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/9636358.html
Copyright © 2020-2023  润新知