实现服务器数据采集脚本技术点总结

上周对服务器数据采集脚本进行了优化和改进,在做的过程中遇到了一些问题,学到了一些知识点,现在总结出来,以供后续学习参考,欢迎大家批评指正,共同学习进步!

一、从别的目录导入模块的两种方式

方式一、

sys.path.append(“想要导入的文件的存放目录”)

import 模块名

方式二、

在文件夹建立一个空文件__init__.py文件,使文件夹变为一个包;然后使用os模块调整此文件所在的路径,使其在所要访问的包的上一级目录

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

sys.path.append(BASE_DIR)

然后就可以导入所想要导入的模块了

二、python操作mysql数据库

使用    MySQLdb (import MySQLdb)

1、对数据库执行增、删、改操作

def exec_curr(sql):

try:

#打开数据库连接                                                                   cnn=MySQLdb.connect(host=host,port=port,user=db_user,passwd=db_passwd,charset=‘utf8‘,db=db)

#使用cursor()方法获取操作游标

cur = cnn.cursor()

#使用execute方法执行SQL语句

cur.execute(sql)

cnn.commit()

except MySQLdb.Error,e:

print e

2、对数据库执行查询操作

def connet_curr(host=host,port=port,db=db,db_user=db_user,db_passwd =            db_passwd,sql="select ip from nosql_ip"):

result=[]

try:

cnn=MySQLdb.connect(host=host,port=port,user=db_user,passwd=db_passwd,charset=‘utf8‘,db=db)

cur = cnn.cursor()

cur.execute(sql)

#获取所有记录列表

rows=cur.fetchall()

for row in rows:

result.append(row)

return result

except MySQLdb.Error,e:

print e

三、python的序列化和反序列化

在做数据采集的时候,用到了公司其他部门同事做好的api,从api取到的数据为字符串格式,需要通过loads转换一下,成为字典格式以方便操作(当然,这里不转化为字典的话,可以使用操作字符串的方式进行操作,但使用字典方式更加方便和准确)

1、可以使用pickle模块

pickle.dumps(dic)

pickle.loads(byte_data)

2、可以使用json模块(我这里用到的是json)

str = json.dumps(dic)

dic_obj = json.loads(dic_str)

四、操作字典的方式方法(字典是无序的,字典的key必须唯一)

假设字典为 info = {

‘staff1‘: "小明",

‘staff2‘: "小红",

‘staff3‘: "小李",

}

1、增加操作:info[‘staff4‘] = “小刘”

2、修改操作:info[‘staff3‘] = "小樊"

3、1)info.pop("staff1")

2)del info[‘staff3‘]

4、查询操作

1)"staff2" in info

2)info.get("staff2")  如果一个key不存在,只返回None

3)info["staff2"]   如果一个key不存在,就报错

5、嵌套字典的查询只需要 :字典名[ ][ ] . . .

6、循环字典

1)for key in info:

print(key,info[key])

2)for k,v in info.items(): #会先把dict转成list

print(k,v)

五、通过ssh连接到其他服务器执行命令的方法

def    ssh_execute_shell(host,command):

ssh_shell = ( ‘‘‘/usr/bin/ssh -n -i 跳板机的私钥地址 -p 26387 -o ‘‘‘

‘‘‘StrictHostKeyChecking=no -o ConnectTimeout=2 [email protected]‘%s‘ ‘‘‘

‘‘‘ "%s" ‘‘‘ % (host, command))

p=subprocess.Popen(ssh_shell,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

out = p.communicate()

return out

六、python的多进程

1、多进程使用模块

from multiprocessing import Process

import time

def f(name):

time.sleep(2)

print(‘hello‘, name)

if __name__ == ‘__main__‘:

p = Process(target=f, args=(‘process1‘,))

p.start()

p.join()

2、由于进程间内存不共享,进程间共享数据的方式有以下几种

Queues(消息队列)

Pipes(管道)

Managers

3、进程池

from  multiprocessing import Process,Pool

import time

def Foo(i):

time.sleep(2)

return i+100

pool = Pool(5)

for i in range(10):

pool.apply_async(func=Foo, args=(i,))

#pool.apply(func=Foo, args=(i,))

pool.close()

pool.join()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。

七、使用python发邮件

import smtplib

from email.MIMEText import MIMEText

mailto_list = ["收件人用户名@staff.sina.com.cn"]

mail_host = "mail.staff.sina.com.cn"

mail_user = "发件人用户名"

mail_pass = "发件人邮箱密码"

mail_postfix = "staff.sina.com.cn"

def send_mail(to_list, sub, content):

me = "hello" + "<" + mail_user + "@" + mail_postfix + ">"

msg = MIMEText(content, _subtype=‘html‘, _charset=‘UTF-8‘)

msg[‘Subject‘] = sub

msg[‘From‘] = me

msg[‘To‘] = ";".join(to_list)

try:

s = smtplib.SMTP()

s.connect(mail_host)

s.login(mail_user, mail_pass)

s.sendmail(me, to_list, msg.as_string())

s.close()

return True

except Exception as e:

print str(e)

return False

欢迎批评指正!

时间: 2024-10-29 19:09:55

实现服务器数据采集脚本技术点总结的相关文章

探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

原文:探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密 下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问百度首页的情景. 在firefox的请求瀑布图里有个表现非常之明显:就是javascript文件下载完毕后,有一段时间是没有网络请求被处理的,这段时间过后http请求才会接着执行,这段空闲时间就是所谓的http请求被阻塞

Web端服务器推送技术原理分析及dwr框架简单的使用

1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切的关系. 随着 Ajax技术的兴起,让广大开发人员又一次看到了使用浏览器来替代桌面应用的机会,并且这次机会非常大.Ajax将整个页面的刷新变成页面局部的刷新,并且数据的传送是以异步方式进行,这使得网络延迟带来的视觉差异将会消失. 但是,在浏览器中的 Ajax应用中存在一个致命的缺陷无法满足传统桌面系

Web端服务器推送技术原理分析及dwr框架简单的使用 转载

1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切的关系. 随着 Ajax技术的兴起,让广大开发人员又一次看到了使用浏览器来替代桌面应用的机会,并且这次机会非常大.Ajax将整个页面的刷新变成页面局部的刷新,并且数据的传送是以异步方式进行,这使得网络延迟带来的视觉差异将会消失. 但是,在浏览器中的 Ajax应用中存在一个致命的缺陷无法满足传统桌面系

深入挖掘Windows脚本技术

[目录]1,前言2,回顾WSH对象3,WMI服务4,脚本也有GUI5,反查杀6,来做个后门7,结语8,参考资料 [前言]本文讲述一些Windows脚本编程的知识和技巧.这里的Windows脚本是指"Windows Script Host"(WSH Windows脚本宿主),而不是HTML或ASP中的脚本.前者由Wscript或Cscript解释,后两者分别由IE和IIS负责解释.描述的语言是VBScript.本文假设读者有一定的Windows脚本编程的基础.如果你对此还不了解,请先学习

HTTP长连接实现“服务器推”的技术

HTTP长连接实现“服务器推”的技术快速入门及演示示例 在我的印象里HTTP是一种“无状态的协议”,也就是不知道以前请求的历史,无法保留上一次请求的结果.Cookie的诞生,弥补了这个不足,浏览器可以通过本地持久化请求数据来记录上次请求的环境.但这个没有根本上改变HTTP请求本身的这种“客户端请求服务器端相应”模式——客户端是主动的,而服务器是被动的.最近听说有“HTTP长连接”,去探索了一把,果然很有意思,能够实现“服务器推”的这种概念,也就是服务器是主动发送请求,客户端是被动接受请求.关于“

ASP.NET Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用ASP.NET现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过

Python Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用Python现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过R

Ruby Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Res

C# Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用C#现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Restf