前言
老男孩的python8期呢有十一天的内容,按照一天实际讲课量6小时算呢,那么这样算来就算你不吃不眠也要三天连续看才能看完,我一篇博客怎么能介绍的完呢,这里呢我就不介绍太具体的内容,而是抛砖引玉的讲一些思想,读者如果觉得这些思想对于自己是有用的呢,可以借鉴,也可以快速定位到老男孩的视频找到类似的例子
svn://10.1.1.11/babybus-lua/video/python8期 老男孩
这里放上一个视频的地址
我们开始吧
基本上呢教学视频前面几章都需要照顾没学过的这门知识的人一点,所以老男孩的前面五章也都是介绍python的一些基本知识,这些知识你去市面上找各种python的书籍也基本都能涉及,不过呢看好的视频学知识的速度确实是要比看书快些,对于想要快速上手python的人来说只要看了前面五天的内容也基本上可以稍微说自己也是会写python的了,不过呢python作为一个大部分人眼中的自动化工具,懂得语法固然是基本但是呢,其思想才是我要重点介绍的,也就是我接下来要说的内容!
载到共享
第六天的内容,FTP的上传和多线程,我这里拿我们的打包系统用到的类似的例子,比如载到共享
需求描述:我刚打好一个apk包,现在要把这个包从打包机mac上拷贝到共享的服务器上
让我呢把这个需求拆分一下我们要做的事情
- 1 登陆要拷贝的服务器
- 2 传送刚打好的apk
- 3 结束退出返回拷贝上去的文件夹
# -*- coding:utf-8 -*-
# 引入ftb模块
from ftplib import FTP
from datetime import datetime
# 开始登陆共享
sourceDir = r'10.1.1.11'
ftp = FTP(sourceDir)
ftp.login('用户名','密码')
# 登陆到哈哈这个文件夹下
tex = 'Share/temp/哈哈'
tex = tex.encode('gbk')
Tostr = (r'/DATA/')+tex
# 存放是否执行成功的信息
GiveTip = '并没有任何导出'
# 平台信息 And代表Android IOS代表ios
IsIos = 'And'
# 刚进来,那就创建目录吧 格式 包名_平台_时间/IsIos/渠道名
if (icount == 0):
mulu = log.app.name.strip()+IsIos+datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
GiveTip = mulu
mulu = mulu.encode('gbk')
# 登陆到刚刚创建的目录里面
ftp.mkd(mulu)
ftp.cwd(mulu)
# myname是哈哈上的命名 myapp是本地的apk全路径
myname = os.path.basename(log.export_app.path)
myname = myname.encode('gbk')
path = os.path.join(TEMP_DIR, '..', log.export_app.path)
myapp = open(path,'rb')
ftp.storbinary('STOR '+myname,myapp)
myapp.close()
# 结束退出
ftp.quit()
# 返回是否成功的信息
return HttpResponse(GiveTip)
接着我来稍微讲解一下多线程,假设我们现在要同时打三个Android包,算了Android打包要做的事情比较多,换个例子,有一个数组现在我要分配数组内的内容分三个线程把数组内的内容打印出来,其实把数组的内容换成打包的信息就能做到三线程打包apk了,读者可以自己试着写一下。让我们看看怎么分三线程打印一个数组的内容
# -*- coding:utf-8 -*-
import threading
import time
# 数组的内容就简单写一下
alltab = [1,2,3,4,5,6]
# 数组的总长度
mlen = len(alltab)
# 分成三份的三分之一地方
start = mlen/3
# 分成三份的三分之二地方
middl = 2*mlen/3
# 每个线程要分配的数组量
topack1 = alltab[0:start]
topack2 = alltab[start:middl]
topack3 = alltab[middl:mlen]
# 创建一个函数打印传入的数组
def Dumptab(mtab):
for x in mtab:
time.sleep(1)
print x
# 开启三个线程 各自执行函数
t2 = threading.Thread(target=Dumptab,args=(topack2,) )
t2.start()
t1 = threading.Thread(target=Dumptab,args=(topack1,) )
t1.start()
t3 = threading.Thread(target=Dumptab,args=(topack3,) )
t3.start()
执行情况如下图
![F(@N]8@ML)32SVI89}NF6IG.png](https://img.haomeiwen.com/i1744941/fc741f67af815138.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
以上讲了两个实战的例子,一个是把本地的文件上传到共享的服务器上另一个是开启三个线程互不干扰的同时执行各自的事情,然而最能引起读者兴趣的除了代码,更应该是思想,下面我便不再贴代码而是与读者一起讨论一下让自己生活工作方便的代码思想
我们来试想自己管理很多电脑吧
分布式监控系统开发,现在我们有不止一台电脑可以搞打包了,假设啊!虽然现实生活中我只有一台。那么要怎么分配任务呢!
需求分析:
- 1 为什么需要另一台电脑,因为本机同时打包的数量多了就会迟钝,我们先假设为五个打包线程同时存在的话再打下一个包的话就会出包缓慢,那么第六个线程就需要分配给另一台电脑打包
- 2 怎么同时保证两边的打包环境是一致的呢,最好是用来额外分配任务的那台电脑作为git,然后每次修改打包模板一致在一开始分配任务的烟灰缸上进行,需要分配任务的时候则git update最新的模板,然后进行打包。当然如果觉得git不好用的话可以写个脚本,直接把整个模板全新的替换到额外分配任务的电脑
-
3 计算分配任务的电脑硬盘写入写出占用率和cpu使用率,一旦莫一方面达到警戒点则分级警报,由此来确定最多分配多少任务出去
以上便是一个简单的分布式布置,当然老男孩还教我很多python的语法,买一送一,比如我最欠缺的javascript和html这些在做django中非常有用。
pack.png
在此贴上一张django做的简单的打包系统,python很方便,关键是你希望有多少事情都让电脑一键轻松解决
if (这件事将来会重复):
不如现在写个一键完成的脚本省去我这些工作
001.png
Creater BBus.YouChangwei
我叫雷轰-支付宝changwei821@126.com
网友评论