定时任务总结

提到定时任务调度的时候,相信很多人会想到芹菜celery,要么就写个脚本塞到crontab中(参考我的另外一篇文章)。不过,一个小的定时脚本,要用celery的话太“重”了。所以,我找到了一个轻量级的定时任务调度的库:schedule和Timer。

crontab

https://blog.csdn.net/weixin_40283480/article/details/79855140 # 参考文章连接

schedule

import schedule
import time

def job():
print(“I’m working…”)

schedule.every(10).minutes.do(job) # 每隔10分钟执行一次任务(可以写任意的时间)
schedule.every().hour.do(job) # 每隔1小时执行一次任务
schedule.every().day.at(“10:30”).do(job) # 每天10:30分钟执行一次任务
schedule.every(5).to(10).days.do(job) # 每隔5到10天执行一次任务
schedule.every().monday.do(job) # 每周一的这个时候执行一次任务
schedule.every().wednesday.at(“13:15”).do(job) # 每周三13:15分钟执行一次任务

while True:
schedule.run_pending()
time.sleep(1)

Timer

import threading
def fun_timer():
print(‘Hello Timer!’)
global timer
timer = threading.Timer(5.5, fun_timer)
timer.start()

timer = threading.Timer(1, fun_timer) # 第一个参数为时间(秒);第二参数是函数名
timer.start()

celery

?????????

pyinstaller

一,简介
PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了。PyInstaller支持Python 2.7和Python 3.3+。可以在Windows、Mac OS X和Linux上使用,但是并不是跨平台的,而是说你要是希望打包成.exe文件,需要在Windows系统上运行PyInstaller进行打包工作;打包成mac app,需要在Mac OS上使用。

二,安装
(1)linux or mac
你可以从PyPi上下载安装,当然也可以使用pip或者easy_install来安装。
pip install pyinstaller
or
easy_install pyinstaller
版本更新
pip install –upgrade pyinstaller
or
easy_install –upgrade pyinstaller
(2)windows
Windows上运行PyInstaller还需要PyWin32或者pypiwin32,其中pypiwin32在你安装PyInstaller的时候会自动安装。
三,使用步骤
(1)找到你需要打包文件的路径,然后cmd—》cd 路径
(2)pyinstall -F 文件名称.py。会生成build和dist文件夹和spec。dist里面就是所有可执行文件了。
(3)部署(自己只在windows上用过):控制面板–》所有控制面板项–》管理工具–》任务计划程序,最后按照提示就好了。

四,具体使用
PyInstaller分析你的python程序,找到所有的依赖项。然后将依赖文件和python解释器放到一个文件夹下或者一个可执行文件中。
(1)打包成一个文件夹
当使用PyInstaller打包的时候,默认生成一个文件夹,文件夹中包含所有依赖项,以及可执行文件。打包成文件夹的好处就是debug的时候可以清楚的看到依赖项有没有包含。另一个好处是更新的时候,只需要更新可执行文件就可以了。当然缺点也很明显,不方便,不易管理。
pyinstaller script.py
那么它是如何工作的呢?PyInstaller的引导程序是一个二进制可执行程序。当用户启动你的程序的时候,PyInstaller的引导程序开始运行,首先创建一个临时的Python环境,然后通过Python解释器导入程序的依赖,当然他们都在同一个文件夹下。
(2)打包成一个文件
我们可以用onefile参数将所有文件打包到一个可执行文件中。
pyinstaller –onefile script.py
打包成一个文件相对于文件夹更容易管理。坏处运行相对比较慢。这个文件中包含了压缩的依赖文件拷贝(.so文件)。

当程序运行时,PyInstaller的引导程序会新建一个临时文件夹。然后解压程序的第三方依赖文件到临时文件夹中。这也是为什么一个可执行文件比文件夹中执行的时间要长的原因。剩下的就和上面的一样了。

spec 文件
当你执行下面命令
pyinstaller options..script.py
PyInstaller首先建一个sepc(specification)文件:script.spec。这个文件的存放地址可以使用参数–specpath= 来定义,默认放在当前文件夹下。

spec文件的作用是什么呢?它会告诉PyInstaller如何处理你的py文件,它会将你的py文件名字和输入的大部分参数进行编码。PyInstaller通过执行spec文件中的内容来生成app,有点像makefile。正常使用中我们是不需要管spec文件的,但是下面几种情况需要修改spec文件:

需要打包资源文件
需要include一些PyInstaller不知道的run-time库
为可执行文件添加run-time 选项
(3)多程序打包
可以通过下面命令生成spec文件
pyi-makespec options script.py [other scripts …]
修改完spec文件,就可以通过下面命令来生成app文件了
pyinstaller options script.spec
当通过spec文件来生成app文件的时候只有下面几个参数是有用的:
–upx-dir=
–distpath=
–noconfirm=
–ascii
spec 文件解析
下面是一个spec文件的例子。
block_cipher = None
a = Analysis([‘minimal.py’],
pathex=[‘/Developer/PItests/minimal’],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=None,
runtime_hooks=None,
excludes=None,
ciper=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz, …)
coll = COLLECT(…)
spec文件中主要包含4个class: Analysis, PYZ, EXE和COLLECT.

Analysis以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息
PYZ是一个.pyz的压缩包,包含程序运行需要的所有依赖
EXE根据上面两项生成
COLLECT生成其他部分的输出文件夹,COLLECT也可以没有
修改spec文件
我们上面说过有时候PyInstaller自动生成的spec文件并不能满足我们的需求,最常见的情况就是我们的程序依赖我们本地的一些数据文件,这个时候就需要我们自己去编辑spec文件来添加数据文件了。
上面的spec文件解析中Analysis中的datas就是要添加到项目中的数据文件,我们可以编辑datas.
a = Analysis(

datas = [(‘you/source/file/path’,’file_name_in_project’),
(‘source/file2’, ‘file_name2’)]

)
可以认为datas是一个List,每个元素是一个二元组。元组的第一个元素是你本地文件索引,第二个元素是拷贝到项目中之后的文件名字。除了上面那种写法,也可以将其提出来。
added_files = […]

a = Analysis(

datas = added_files,

)
其他的二进制文件添加方法类似。

猜你喜欢

转载自blog.csdn.net/weixin_40283480/article/details/80801771