进程和线程的区别, 面相对象补充, 进程, 数据共享, 锁, 进程池, 爬虫模块(requests, bs4(beautifulsoup))...
一. 进程和线程的区别?
第一:
进程是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. ...
- Linux进程与线程的区别 详细总结(面试经验总结)
首先,简要了解一下进程和线程.对于操作系统而言,进程是核心之核心,整个现代操作系统的根本,就是以进程为单位在执行任务.系统的管理架构也是基于进程层面的.在按下电源键之后,计算机就开始了复杂的启动过程, ...
- Linux进程与线程的区别
2019独角兽企业重金招聘Python工程师标准>>> Linux进程与线程的区别 cnyinlinux 本文较长,耐心阅读,必有收获! 进程与线程的区别,早已经成为了经典问题.自线 ...
- 【面试问题】进程和线程的区别——通俗易懂
1. "进程"是什么 1.2 管理进程 1.3 内存管理 1.4 进程间通信 2. 线程是什么 3.进程和线程的区别 1. "进程"是什么 在对比"进 ...
- 进程和线程的区别,进程间通信方式,怎么选择比较好
此篇文章讲解比较多,面试记住原理特点应该差不多了 进程和线程的区别 进程 进程是资源分配的基本单位. 进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态 ...
- 面试常问——进程和线程的区别
最近学习到了Java的多线程部分,了解到了进程和线程的相关概念,下面我们来介绍一下进程和线程吧. 目录 一.进程 二.线程 三.进程VS线程 一.进程 进程是操作系统资源分配的最小单元.一个进程拥有的 ...
- 进程和线程的区别(c++)
进程和线程的区别 进程 process 什么是进程 一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位 进程与程序的差别 进程是一个动态的概念,而程序只是 ...
- 进程和线程的区别?什么时候用进程?什么时候用线程?----看到好的复制到自己的园子里哈哈...
进程和线程的区别?什么时候用进程?什么时候用线程? 答:首先得知道什么是进程什么是线程? 我的理解是进程是指在系统中正在运行的一个应用程序:程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的 ...
- 谈谈进程和线程的区别
进程和线程的区别是面试提问频率最高的问题,没有之一. 我们首先了解一下进程和线程的概念. 进程:一个进程就是一个正在执行程序的实例. 线程:操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进 ...
最新文章
- 【从零学习OpenCV 4】4种读取Mat类元素的的方法
- 动态人脸识别系统服务器,动态人脸识别监控管理平台的设计与实现
- ubuntu下mysql中文乱码_Ubuntu的MySQL中文乱码问题--自己躺坑
- (Matlab)从已知向量中随机提取若干元素
- 【docker】修改docker容器配置,设置/修改端口映射
- 串口之GetCommState、SetCommState函数详解
- cvc降噪和主动降噪_1MORE 主动降噪圈铁耳机图集
- java class文件常量池_JAVA程序员谈谈class文件结构中的常量池-class文件
- cacti登录密码忘记解决方法
- recv函数返回0_函数VLOOKUP与LOOKUP的PK,大战一触即发 Excel神技能!
- 201771010101白玛次仁《面向对象程序设计(java)》第十二周实验总结
- salesforce 零基础学习(六十八)http callout test class写法
- R语言自然语言处理:文本向量化——词嵌入(Word Embedding)
- js实现调用摄像头拍照功能
- 嵌入式仿真用Qt播放器和录像机
- C语言基础——二维数组应用(一)井字棋
- gradle配置阿里Maven仓库
- python二维插值_SciPy二元样条插值
- 【无标题】SONET基本术语
- windows7远程桌面连接时崩溃问题