lt;转载>为什么在Python里推荐使用多进程而不是多线程

Python016

lt;转载>为什么在Python里推荐使用多进程而不是多线程,第1张

经常有人在群里问,运维人员需不需要学开发?需不需要学 PYTHON ? PYTHON 和 SHELL 有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲,求求新手们,以后别他妈瞎问了。

现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能,不会开发,你就不能充分理解你们系统的业务流程,你就不能帮助调试、优化开发人开发的程序, 开发人员有的时候很少关注性能的问题,这些问题就得运维人员来做,一个业务上线了,导致 CPU 使用过高,内存占用过大,如果你不会开发,你可能只能查到进程级别,也就是哪个进程占用这么多,然后呢?然后就交给开发人员处理了,这样咋体现你的价值?

另外,大一点的公司,服务器都上几百,上千,甚至数万台,这种情况下怎样做自动化运维?用 SHELL 写脚本 FOR 循环?呵呵,歇了吧, SHELL 也就适合简单的系统管理工作。到复杂的自动化任务还得要用专门的开发语言。你可能说了,自动化管理有专门的开源软件\监控也有,直接拿来用下就好了,但是现有的开源软件如 puppet\saltstack\zabbix\nagio 多为通用的软件,不可能完全适用你公司的所有需求,当你需要做定制、做二次开发的时候,你咋办?找开发部门?开发部门不懂运维的实际业务逻辑,写出来的东西烂烂不能用,这活最后还得交给运维开发人员来做。

其次,不会运维开发,你就不能自己写运维平台\复杂的运维工具,一切要借助于找一些开源软件拼拼凑凑,如果是这样,那就请不要抱怨你的工资低,你的工作不受重视了。

为什么要学 PYTHON ?

PYTHON 第一是个非常牛 B 的脚本语言, 能满足绝大部分自动化运维的需求,又能做后端 C/S 架构,又能用 WEB 框架快速开发出高大上的 WEB 界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来,你才有资格跟老板谈重视, 否则,还是老老实实回去装机器吧。

运维开发为什么要用 PYTHON ?

Good question, 为什么不用 PHP , JAVA , C++ , RUBY ,这里我只能说,见人见智, 如果你碰巧已经掌握了除 PYTHON 之外的其它语言,那你爱用啥用啥,如果你是一个连 SHELL 都还没写明白的新手,想学个语言的话,请用 PYTHON , 为什么呢?首先, PHP 是跟 PYTHON 比的最多的,其实他俩根本就不用比,为什么呢?两个语言适用性不同, PHP 主要适用于 WEB 开发,可以迅速的做出中小型,轻量级的 WEB 网站,但后端嘛,基本还是要借助其它语言, 借助什么语言呢? SHELL ? PYTHON ?呵呵。 而 PYTHON 呢, 是个综合语言, 前后端都可以,单拿出来比 WEB ,也一点不比 PHP 差,但为什么WEB方向上 PHP 比 PYTHON 要火? 先入为主嘛, PHP 90 年代诞生就是做 WEB 的, PYTHON2000 年后才出现 WEB 框架,但论优秀程度上, PYTHON 的 WEB 框架基本上出其无左,至少是跟 PHP 比。

那 JAVA 呢?好吧,一个臃肿\中庸\豪无新意的语言,还是老老实实用它来做 ERP 吧,搞个运维小平台,用 JAVA 真心没啥必要,在我看来, JAVA 就是稳定的中年男人,稳定\成熟\秃顶,而 PYTOHN 代表的就是青春, 简洁\快\干净\帅!

C++ \ C ,这个嘛,我只能说,如果你会了 PYTHON, 又会 C 的话,那你会更吃香,但是不会 C 的话,其实也无大碍,基本上做运维的人,搞搞 C 就是为了来装 B 的,因为多数情况下你都到不了看系统底层源码的程度。

RUBY ,小日本开发的,还不错,风格跟 PYTHON 有点像,因为 ruby onrails 出了名,国外用的比较多,国内,放心吧,没戏, PYTHON 已经把它的想象空间都占了。

当然还有新的语言 GO , 有些搞运维的看见做开发的人员搞 GO ,也想凑热闹,觉得是未来,我想说,别瞎没事跟风, GO 再成功,也不会变成运维开发语言。

有些人觉得 PYTHON 效率底,说他不能支持多线程, OH ,好吧,这个还有点说对了,但是我想问,看我这篇文章的有几个做过搜索引擎开发?有几个做个上亿 PV 的并发网站开发? 有几个看过 LINUX 内核源码?如果没有,请别瞎跟着传了,知道 PYTHON 为什么不支持多线程吗?这句话问错了,其实 PYTHON 支持多线程,只是不支持多 CPU 多线程,也就是一个程序 spawn 出来的多线程只能占用一个 CPU ,但是为什么呢?噢,因为 GIL , GIL 是什么东东,请自行补脑。。。但是你非得用多线程吗?你可以用多进程呀,再牛 B 你还可以用协程呀,这些 PYTOHN 支持的都很好呀,如果你的程序逻辑不好,搞个多线程也快不起来。我认识一个博士讲过一句话,我觉得不错,他说,程序效率高低, 80% 都是写程序的人决定了,语言本身就占 20% ,所以下次有人再说 PYTHON 效率低的时候,请让他先回去自己检查下自己的程序多了多少无用的逻辑、循环等等。 这个博士自己用 PYTHON 写的 WEB 程序,一台服务器每天能处理上亿请求,一秒并发近两万, 什么 WEB 框架这么牛 B ? 别问它是谁, 它叫 tornado 。

PYTHON 能否自学?

当然可以,什么都可以自学,前提是你得能学得会,见过 N 多菜鸟踏上上自学的不归路,他妈的什么都能自学的话,还用大学干什么?自己在家鳖不就行了?动不动就说 PYTHON 是个脚本语言,自己看看就不会了,说这话的只可能有两种人,一种是高手,一种是 SB ,对于高手来讲,他肯定已经会其它语言, PYTHON 在这种情况下,自学当然就很容易学会,几年前我刚接触 PYTHON 时,代码遇到问题,找了个开发的哥们帮调试,哥们帮调了十几分钟就搞定了,结果人家以前一句 PYTHON 代码也没写过,为什么,因为语言都有相通之处,一门掌握好了,其它门自己学学就会了。但对于新手来讲,没任何语言基础就开始自学,那么恭喜你,菜鸟们见此文章为证,从今天开始自学,一年后,你要是能自己做出个软件来,来找我要一千块钱。 哈哈,真的。 基本上自学是属于专业人员干的事情,就像会一门乐器了,自己学下就可能学会另一门,但我之前没音乐基础,跟着老师都没把吉它学会。

所以奉劝没基础又想学 PYTHON 的同学,花点钱去报个班学吧,拿钱换时间,时间是生命,钱没了可再挣钱,时间过去了就再也不会回来,如果你不信邪,非要自己学,那我佩服你的勇气,不过自己试试就知道了。

说了这么多,只想告诉那些迷茫不知所措该学什么语言的新手们, 在你还没学好走路的时候,不要老想着,将来我当上老板了,我是开宝马呢?还是开奔驰呢?先学会骑自行车吧。。。

转载

HTML教程:

HTTP协议基础:

下面列出了 HTML 定义的元素集。点击链接即可前往元素的定义,其中包含了该元素的所有成员集。

对象

a 标明超链接的起始或目的位置。

acronym 标明缩写词。

address 特定信息,如地址、签名、作者、此文档的原创者。

applet 在页面上放置可执行内容。

area 定义一个客户端图像映射中一个超级链接区域的形状、坐标和关联 URL。

b 指定文本应以粗体渲染。

base 指定一个显示 URL 用于解析对于外部源的链接和引用,如图像和样式表。

baseFont 设置渲染文本时作为缺省字体的基础字体值。

bdo 允许作者为选定文本片断禁用双向法则。

bgSound 允许页面带有背景声音或创建音轨。

big 指定内含文本要以比当前字体稍大的字体显示。

blockQuote 设置文本中的一段引语。

body 指定文档主体的开始和结束。

br 插入一个换行符。

button 指定其中所含的 HTML 要被渲染为一个按钮。

caption 指定表格的简要描述。

center 将后面的文本和图像居中显示。

cite 用斜体显示标明引言。

code 指定代码范例。

col 指定基于列的表格缺省属性。

colGroup 指定表格中一列或一组列的缺省属性。

comment 标明不可见的注释。

custom 代表了一个用户自定义元素。

dataTransfer 提供了对于预定义的剪贴板格式的访问,以便在拖曳操作中使用。

dd 在定义列表中表明定义。定义通常在定义列表中缩进。

del 表明文本已经从文档中删除。

dfn 表明术语的定义实例。

dir 引起目录列表。

div 指定渲染 HTML 的容器。

dl 引起定义列表。

dt 在定义列表中表明定义术语。

em 强调文本,通常以斜体渲染。

embed 允许嵌入任何文档。

fieldSet 在字段集包含的文本和其它元素外面绘制一个方框。

font 指定用于渲染所包含文本的新字体、大小和颜色。

form 指定所包含控件在表单中起作用。

frame 在 FRAMESET 元素内指定单个框架。

frameSet 指定一个框架集,用于组织多个框架和嵌套框架集。

head 提供了关于文档的无序信息集合。

hn 以标题样式渲染文本。

hr 绘制水平线。

html 表明文档包含 HTML 元素。

HTML 注释 避免任何内含文本或 HTML 源代码被处理并在浏览器窗口中显示。

i 指定文本应以斜体渲染,若可用的话。

iframe 创建内嵌浮动框架。

img 在文档中嵌入图像或视频剪辑。

IMPORT 从元素行为中导入标签定义。

input 创建各种表单输入控件。

input type=button 创建按钮控件。

input type=checkbox 创建复选框控件。

input type=file 创建文件上载控件,该控件带有一个文本框和一个浏览按钮。

input type=hidden 传输关于客户/服务器交互的状态信息。

input type=image 创建一个图像控件,该控件单击后将导致表单立即被提交。

input type=password 创建与 INPUT type=text 控件类似的单行文本输入控件,不过其中并不显示用户输入的内容。

input type=radio 创建单选钮控件。

input type=reset 创建一个按钮,该按钮单击后将重置表单控件为其缺省值。

input type=submit 创建一个按钮,该按钮单击后将提交表单。

input type=text 创建一个单行的文本输入控件。

ins 指定被插入到文档中的文本。

isIndex 使浏览器显示一个对话框,提示用户输入单行文本。

kbd 以固定字体渲染文本。

label 为页面上的其它元素指定标签。

legend 在 fieldSet 对象绘制的方框内插入一个标题。

li 引起列表中的一个项目。

link 允许当前文档和外部文档之间建立连接。

listing 以固定字体渲染文本。

map 包含客户端图像映射的坐标数据。

marquee 创建一个滚动的文本字幕。

menu 创建一个项目的无序列表。

meta 向服务器和客户端传达关于文档的隐藏信息。

noBR 不换行渲染文本。

noFrames 包含对于那些不支持 FRAMESET 元素的浏览器使用的 HTML。

noScript 指定要在不支持脚本的浏览器显示的 HTML。

object 向 HTML 页面中插入对象。

ol 绘制文本的编号列表。

optGroup 允许作者对 select 元素中的选项进行逻辑分组。

option 引起 SELECT 元素中的一个选项。

p 引起一段。

param 设置 APPLET、EMBED 或 OBJECT 元素的属性初始值。

plainText 以固定宽度字体渲染文本,不处理标签。

pre 以固定宽度字体渲染文本。

q 分离文本中的引语。

rt 指明 RUBY 元素的注音文本。

ruby 指明要放置在文本串之上或内嵌的注解或发音指南。

s 以删除线字体渲染文本。

samp 指定代码范例。

script 为脚本指定由脚本引擎解释的脚本。

select 引起列表框或下拉框。

small 指定内含文本要以比当前字体稍小的字体显示。

span 指定内嵌文本容器。

strike 以删除线字体渲染文本。

strong 以粗体渲染文本。

style 指定页面的样式表。

sub 指定内含文本要以下标的形式显示,通常比当前字体稍小。

sup 指定内含文本要以上标的形式显示,通常比当前字体稍小。

table 指定所含内容要组织成行列的表格。

tBody 指明行作为表格主体。

td 指定表格中的单元格。

textArea 指定多行文本输入控件。

tFoot 指明行作为表尾。

th 指定标题列。标题列将在单元格中居中并以粗体显示。

tHead 指明行作为表头。

title 包含文档的标题。

tr 指定表格中的一行。

tt 以固定宽度字体渲染文本。

u 带下划线渲染文本。

ul 绘制文本的项目符号列表。

var 定义编程变量。通常以斜体渲染。

wbr 向一块 NOBR 文本中插入软换行。

xml 在 HTML 页面上定义一个 XML 数据岛。

xmp 以固定宽度字体渲染作为示例的字体。

HTML标签解释大全

一、HTML标记

标签:!DOCTYPE

说明:指定了 HTML 文档遵循的文档类型定义(DTD)。

标签:a

说明:标明超链接的起始或目的位置。

标签:acronym

说明:标明缩写词。

标签:address

说明:特定信息,如地址、签名、作者、此文档的原创者。

标签:applet

说明:在页面上放置可执行内容。

标签:area

说明:定义一个客户端图像映射中一个超级链接区域的形状、坐标和关联 URL。

标签:attribute

说明:以对象的形式代表了 HTML 元素的标签属性或属性。

标签:b

说明:指定文本应以粗体渲染。

标签:base

说明:指定一个显式 URL 用于解析对于外部源的链接和引用,如图像和样式表。

标签:basefont

说明:设置渲染文本时作为默认字体的基础字体值。

标签:bdo

说明:允许作者为选定文本片断禁用双向法则。

标签:bgsound

说明:允许页面带有背景声音或创建音轨。

标签:big

说明:指定内含文本要以比当前字体稍大的字体显示。

标签:blockquote

说明:设置文本中的一段引语。

标签:body

说明:指定文档主体的开始和结束。

标签:br

说明:插入一个换行符。

标签:button

说明:指定其中所含的 HTML 要被渲染为一个按钮。

标签:caption

说明:指定表格的简要描述。

标签:center

说明:将后面的文本和图像居中显示。

标签:cite

说明:用斜体显示标明引言。

标签:clientinformation

说明:包含关于 Web 浏览器的信息。

标签:clipboarddata

说明:提供了对于预定义的剪贴板格式的访问,以便在编辑操作中使用。

标签:code

说明:指定代码范例。

标签:col

说明:指定基于列的表格默认属性。

标签:colgroup

说明:指定表格中一列或一组列的默认属性。

标签:comment

说明:标明不可见的注释.

标签:currentStyle

说明:代表了在全局样式表、内嵌样式和 HTML 标签属性中指定的对象格式和样式。

标签:custom

说明:代表了一个用户自定义元素。

标签:datatransfer

说明:提供了对于预定义的剪贴板格式的访问,以便在拖曳操作中使用。

标签:dd

说明:在定义列表中表明定义。定义通常在定义列表中缩进。

标签:defaults

说明:编程设置元素行为的默认属性。

标签:del

说明:表明文本已经从文档中删除。

标签:dfn

说明:表明术语的定义实例。

标签:dir

说明:引起目录列表。

标签:div

说明:指定渲染 HTML 的容器。

标签:dl

说明:引起定义列表。

标签:document

说明:代表给定浏览器窗口中的 HTML 文档。

标签:dt

说明:在定义列表中表明定义术语。

标签:em

说明:强调文本,通常以斜体渲染。

标签:embed

说明:允许嵌入任何文档。

标签:event

说明:代表事件状态,如事件发生的元素,键盘状态,鼠标位置和鼠标按钮状态。

标签:external

说明:允许访问由 Microsoft Internet Explorer 浏览器组件宿主应用程序提供的附加对象模型。

标签:fieldset

说明:在字段集包含的文本和其它元素外面绘制一个方框。

标签:font

说明:指定用于渲染所包含文本的新字体、大小和颜色。

标签:frame

说明:在 FRAMESET 元素内指定单个框架。

标签:frameset

说明:指定一个框架集,用于组织多个框架和嵌套框架集。

标签:from

说明:指定所包含控件在表单中起作用。

标签:head

说明:提供了关于文档的无序信息集合。

标签:history

说明:包含了用户已浏览的 URL 的信息。

标签:hn

说明:以标题样式渲染文本。

标签:hr

说明:绘制水平线。

标签:html

说明:表明文档包含 HTML 元素。Microsoft Internet Explorer 6 的新增内容 当你使用 !DOCTYPE 声明指定标准兼容模式,此元素将代表画布──也就是文档内容将渲染到的整个表面。

标签:i

说明:指定文本应以斜体渲染,若可用的话。

标签:iframe

说明:创建内嵌浮动框架。

标签:input

说明:创建各种表单输入控件。

标签:input type=button

说明:创建按钮控件。

标签:input type=checkbox

说明:创建复选框控件。

标签:input type=file

说明:创建文件上载控件,该控件带有一个文本框和一个浏览按钮。

标签:input type=hidden

说明:传输关于客户/服务器交互的状态信息。

标签:input type=image

说明:创建一个图像控件,该控件单击后将导致表单立即被提交。

标签:input type=password

说明:创建与 INPUT type=text 控件类似的单行文本输入控件,不过其中并不显示用户输入的内容。

标签:input type=radio

说明:创建单选钮控件。

标签:input type=reset

说明:创建一个按钮,该按钮单击后将重置表单控件为其默认值。

标签:input type=submit

说明:创建一个按钮,该按钮单击后将提交表单。

标签:input type=text

说明:创建一个单行的文本输入控件。

标签:ins

说明:指定被插入到文档中的文本。

标签:isindex

说明:使浏览器显示一个对话框,提示用户输入单行文本。

标签:kdb

说明:以固定宽度字体渲染文本。

标签:label

说明:为页面上的其它元素指定标签。

标签:legend

说明:在 fieldSet 对象绘制的方框内插入一个标题。

标签:li

说明:引起列表中的一个项目。

标签:link

说明:允许当前文档和外部文档之间建立连接。

标签:listing

说明:以固定字体渲染文本.

标签:location

说明:包含关于当前 URL 的信息。

标签:map

说明:包含客户端图像映射的坐标数据。

标签:marquee

说明:创建一个滚动的文本字幕。

标签:menu

说明:创建一个项目的无序列表。

标签:meta

说明:向服务器和客户端传达关于文档的隐藏信息。

标签:namespace

说明:向文档中动态导入一个元素行为。

标签:navigator

说明:包含关于 Web 浏览器的信息。

标签:nextID

说明:创建编辑软件可以读取的唯一标识符。

标签:nobr

说明:不换行渲染文本。

标签:noframes

说明:包含对于那些不支持 FRAMESET 元素的浏览器使用的 HTML。

标签:noscript

说明:指定要在不支持脚本的浏览器显示的 HTML。

标签:object

说明:向 HTML 页面中插入对象。

标签:ol

说明:绘制文本的编号列表。

标签:optgroup

说明:允许作者对 select 元素中的选项进行逻辑分组。

标签:option

说明:引起 select 元素中的一个选项。

标签:p

说明:引起一段。

标签:page

说明:代表 styleSheet 中的一条 @page 规则。

标签:param

说明:设置 applet、embed 或 object 元素的属性初始值。

标签:popup

说明:一种特殊的顶层窗口,主要用于出现在应用程序主窗口之外的对话框、消息框和其它临时窗口。

标签:pre

说明:以固定宽度字体渲染文本。

标签:q

说明:分离文本中的引语。

标签:rt

说明:指明 ruby 元素的注音文本。

标签:ruby

说明:指明要放置在文本串之上或内嵌的注解或发音指南。

标签:rule

说明:代表了层叠样式表(CSS)中由选择符和一个或多个声明组成的的样式

标签:runtimestyle

说明:代表了居于全局样式表、内嵌样式和 HTML 标签属性指定的格式和样式之上的对象的格式和样式。

标签:s

说明:以删除线字体渲染文本。

标签:samp

说明:指定代码范例。

标签:screen

说明:包含关于客户屏幕和渲染能力的信息。

标签:script

说明:为脚本指定由脚本引擎解释的脚本。

标签:select

说明:引起列表框或下拉框。

标签:selection

说明:代表了当前激活选中区,即高亮文本块,和/或文档中用户可执行某些操作的其它元素。

标签:small

说明:指定内含文本要以比当前字体稍小的字体显示。

标签:span

说明:指定内嵌文本容器。

标签:strike

说明:以删除线字体渲染文本。

标签:strong

说明:以粗体渲染文本。

标签:style

说明:代表了给定元素所有可能的内嵌样式的当前设置。

标签:stylesheet

说明:代表了文档中单一的样式表

标签:sub

说明:指定内含文本要以下标的形式显示,通常比当前字体稍小。

标签:sup

说明:指定内含文本要以上标的形式显示,通常比当前字体稍小。

标签:table

说明:指定所含内容要组织成行列的表格。

标签:tbody

说明:指明行作为表格主体。

标签:td

说明:指定表格中的单元格

标签:textarea

说明:指定多行文本输入控件。

标签:textnode

说明:将文本字符串代表为文档层次中的结点。

标签:textrange

说明:代表 HTML 元素中的文本。

标签:textrectangle

说明:指定包含元素或 TextRange 对象中一行文本的矩形。

标签:tfoot

说明:指明行作为表尾。

标签:th

说明:指定标题列。标题列将在单元格中居中并以粗体显示。

标签:thead

说明:指明行作为表头。

标签:title

说明:包含文档的标题。

标签:tr

说明:指定表格中的一行。

标签:tt

说明:以固定宽度字体渲染文本。

标签:u

说明:带下划线渲染文本。

标签:ul

说明:绘制文本的项目符号列表。

标签:userprofile

说明:提供了允许脚本对用户配置信息请求读取访问并执行读取操作的方法。

标签:var

说明:定义编程变量。通常以斜体渲染。

标签:wbr

说明:向一块 nobr 文本中插入软换行。

标签:window

说明:代表浏览器中一个打开的窗口。

标签:xml

说明:在 HTML 页面上定义一个 XML 数据。

标签:xmp

说明:以固定宽度字体渲染作为示例的字体。