一. 进程和线程的区别?
    第一:
        进程是cpu资源分配的最小单元。
        线程是cpu计算的最小单元。
    第二:
        一个进程中可以有多个线程。
    第三:
        对于Python来说他的进程和线程和其他语言有差异,是有GIL锁。
        GIL锁保证一个进程中同一时刻只有一个线程被cpu调度。

IO密集型操作可以使用多线程;计算密集型可以使用多进程;
    
二. 面向对象补充:

class Foo(object):def __init__(self):object.__setattr__(self, 'info', {}) # 在继承的对象中设置值的本质def __setattr__(self, key, value):          # 会拦截所有属性的的赋值语句self.info[key] = valuedef __getattr__(self, item):         #  拦截点号运算。当对未定义的属性名称和实例进行点号# 运算时,就会用属性名作为字符串调用这个方法。如果继承树可以找到该属性,则不调用此方法print(item)             # namereturn self.info[item]obj = Foo()
obj.name = 'nacho'
print(obj.name)     # nacho
print(obj.info)     # {'name': 'nacho'}

三. 进程
    - 进程间数据不共享

data_list = []
def task(arg):data_list.append(arg)print(data_list)def run():for i in range(10):p = multiprocessing.Process(target=task,args=(i,))# p = threading.Thread(target=task,args=(i,))p.start()if __name__ == '__main__':      # win10需要用这个, linux不需要run()

- 常用功能:
        - join
        - deamon
        - name
        - multiprocessing.current_process()
        - multiprocessing.current_process().ident/pid

- 类继承方式创建进程

class MyProcess(multiprocessing.Process):def run(self):print('当前进程',multiprocessing.current_process())def run():p1 = MyProcess()p1.start()p2 = MyProcess()p2.start()if __name__ == '__main__':run()

四. 进程间数据共享

Queue:linux:q = multiprocessing.Queue()def task(arg,q):q.put(arg)def run():for i in range(10):p = multiprocessing.Process(target=task, args=(i, q,))p.start()while True:v = q.get()print(v)run()windows: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 True:v = q.get()print(v)Manager:(*)Linux:m = multiprocessing.Manager()dic = m.dict()def task(arg):dic[arg] = 100def run():for i in range(10):p = multiprocessing.Process(target=task, args=(i,))p.start()input('>>>')print(dic.values())if __name__ == '__main__':run()windows:def task(arg,dic):time.sleep(2)dic[arg] = 100if __name__ == '__main__':m = multiprocessing.Manager()dic = m.dict()process_list = []for i in range(10):p = multiprocessing.Process(target=task, args=(i,dic,))p.start()process_list.append(p)while True:count = 0for p in process_list:if not p.is_alive():count += 1if count == len(process_list):breakprint(dic)

五. 进程锁

import time
import threading
import multiprocessinglock = multiprocessing.RLock()def task(arg):print('鬼子来了')lock.acquire()time.sleep(2)print(arg)lock.release()if __name__ == '__main__':p1 = multiprocessing.Process(target=task,args=(1,))p1.start()p2 = multiprocessing.Process(target=task, args=(2,))p2.start()

六. 进程池

import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutordef task(arg):time.sleep(2)print(arg)if __name__ == '__main__':pool = ProcessPoolExecutor(6)      # 取决于CPU的核心数for i in range(10):pool.submit(task,i)

七. 爬虫:
    示例:

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; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'})# 查看下载下来的文本信息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://dig.chouti.com/all/hot/recent/%s' %i)if __name__ == '__main__':run()

转载于:https://www.cnblogs.com/NachoLau/p/9637177.html

进程和线程的区别, 面相对象补充, 进程, 数据共享, 锁, 进程池, 爬虫模块(requests, bs4(beautifulsoup))...相关推荐

  1. 操作系统——进程和线程的区别

    操作系统--进程和线程的区别 最近学习了操作系统中的进程和线程这两个知识点,昨天老师给我们出了一道题:进程和线程的区别.听完题目后一脸懵逼,只想到了进程的一部分概念,回来之后就查书,找到了答案. 1. ...

  2. Linux进程与线程的区别 详细总结(面试经验总结)

    首先,简要了解一下进程和线程.对于操作系统而言,进程是核心之核心,整个现代操作系统的根本,就是以进程为单位在执行任务.系统的管理架构也是基于进程层面的.在按下电源键之后,计算机就开始了复杂的启动过程, ...

  3. Linux进程与线程的区别

    2019独角兽企业重金招聘Python工程师标准>>> Linux进程与线程的区别 cnyinlinux 本文较长,耐心阅读,必有收获! 进程与线程的区别,早已经成为了经典问题.自线 ...

  4. 【面试问题】进程和线程的区别——通俗易懂

    1. "进程"是什么 1.2 管理进程 1.3 内存管理 1.4 进程间通信 2. 线程是什么 3.进程和线程的区别 1. "进程"是什么 在对比"进 ...

  5. 进程和线程的区别,进程间通信方式,怎么选择比较好

    此篇文章讲解比较多,面试记住原理特点应该差不多了 进程和线程的区别 进程 进程是资源分配的基本单位. 进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态 ...

  6. 面试常问——进程和线程的区别

    最近学习到了Java的多线程部分,了解到了进程和线程的相关概念,下面我们来介绍一下进程和线程吧. 目录 一.进程 二.线程 三.进程VS线程 一.进程 进程是操作系统资源分配的最小单元.一个进程拥有的 ...

  7. 进程和线程的区别(c++)

    进程和线程的区别 进程 process 什么是进程 一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位 进程与程序的差别 进程是一个动态的概念,而程序只是 ...

  8. 进程和线程的区别?什么时候用进程?什么时候用线程?----看到好的复制到自己的园子里哈哈...

    进程和线程的区别?什么时候用进程?什么时候用线程? 答:首先得知道什么是进程什么是线程? 我的理解是进程是指在系统中正在运行的一个应用程序:程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的 ...

  9. 谈谈进程和线程的区别

    进程和线程的区别是面试提问频率最高的问题,没有之一. 我们首先了解一下进程和线程的概念. 进程:一个进程就是一个正在执行程序的实例. 线程:操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进 ...

最新文章

  1. 【从零学习OpenCV 4】4种读取Mat类元素的的方法
  2. 动态人脸识别系统服务器,动态人脸识别监控管理平台的设计与实现
  3. ubuntu下mysql中文乱码_Ubuntu的MySQL中文乱码问题--自己躺坑
  4. (Matlab)从已知向量中随机提取若干元素
  5. 【docker】修改docker容器配置,设置/修改端口映射
  6. 串口之GetCommState、SetCommState函数详解
  7. cvc降噪和主动降噪_1MORE 主动降噪圈铁耳机图集
  8. java class文件常量池_JAVA程序员谈谈class文件结构中的常量池-class文件
  9. cacti登录密码忘记解决方法
  10. recv函数返回0_函数VLOOKUP与LOOKUP的PK,大战一触即发 Excel神技能!
  11. 201771010101白玛次仁《面向对象程序设计(java)》第十二周实验总结
  12. salesforce 零基础学习(六十八)http callout test class写法
  13. R语言自然语言处理:文本向量化——词嵌入(Word Embedding)
  14. js实现调用摄像头拍照功能
  15. 嵌入式仿真用Qt播放器和录像机
  16. C语言基础——二维数组应用(一)井字棋
  17. gradle配置阿里Maven仓库
  18. python二维插值_SciPy二元样条插值
  19. 【无标题】SONET基本术语
  20. windows7远程桌面连接时崩溃问题

热门文章

  1. 解决数据库导入导出的常见问题集解决办法
  2. 让普通用户可以kill自己用户下的session(转)
  3. NAnt 与 MS Build
  4. JAVA08 多态
  5. thinkphp5.0架构总览
  6. 【转】URL和URI的区别
  7. Visual Studio 2015年预览设置: 辅助安装程序说明
  8. 怎样在Xcode 4下编译发布与提交App到AppStore?(转)
  9. delphi解析json(解决乱码问题)
  10. 【干货】网易严选大数据架构.pdf(附下载链接)