python之时间计划任务和启动程序
time模块
import time #导入时间模块
time.time() #函数返回自那一刻以来返回的秒数
time.sleep()#让程序暂停的秒数
now=time.time()
round.(now,2)#四舍五入接入整数,到小数点的2位数
项目实例:超级秒表
- 记录回车开始的时间,每次按键的时间。每次按键都是一个新的单圈
- 打印圈数、总时间和单圈时间。
代码实现: - 在程序开始时调用time.time()得到当前的时间,将他保存成一个时间戳,在每圈开始时都一样
- 记录圈数,每次用户按下回车键时加1
- 使用时间戳相减,得到计算的流逝时间
- 处理KeyboardInterrupt异常,这样用户可以按键ctrl+c退出
- 打开一个新的文件编辑窗口,并把文件保存。
代码实现:
import time
print('please ctrl+c quick.')
print('started')
startTime=time.time()
lastTime=startTime()
lapNum=1
try:
while Ture:
input()
lapTime=round(time.time()-lastTime,2)
totalTime=round(time.time()-startTime,2)
print('Lap %s:(%S)'%(lapNum,tatalTime,lapTime),end='')
lapNum +=1
lastTime=time.time()
except KeybordInterrupt:
print('down')
datatime模块
datatime.datatime.now()#表示当前的时间和日期。
datatime.datatime.fromtimestamp(time.time())#返回当前纪元的时间戳,也就是返回当前时刻的datatime对象
delta=datatime.timedelta(days=11,hours=10,minites=9,seconds=8)#接收关键字参数,week,days,hours,minutes,milliseconds和microdseconds
delta.days,delta.seconds,delta.microseconds
#datatime模块:利用加和减运算符,timedelta对象与datatime对象或者其他timedelta对象相减或者相加。利用*和/运算符,timedelta对象可以乘以或者除以整数或者浮点数。
#将datatime对象转换为字符串
time1=datatime.datatime(2022,10,21,16,29,0)
time1.strftime('%y/%m/%d,%H,%M,%S)
#字符串转换成为datetime对象
datetime.datetime.strptime('october 21,%B,%d,%Y)
#函数strftime()函数和strptime()函数方法相反。
python的时间函数的总结:
- unix纪元时间戳(在time模块中的使用)是一个浮点数或者是一个整数值
- datetime对象(在datetime模块中)包含一些整型值,保存在year,month,day,hour,和second等属性
- timedelta对象表示一段时间,而不是特定的时刻(datetime模块)
- time.time()函数返回的是一个浮点数,表示当前时刻的Unix 纪元时间戳
- time.sleep(Second)函数让时间暂停,second参数指定秒数
- datetime.datetime(year,month,day,hour,minute,second),函数返回的的是指定时刻的datetime对象,如果函数没有提供hour、minutes或者second参数,他们默认值为零
- datetime.datetime.now()函数返回当前的时刻的datetime对象
- datetime.datetime.fromtimestamp(food)函数返回food时间戳参数表示的时刻的datetime对象
- datetimedelta(weeks,days,hours,sencods,millideconds)函数返回的一个表示一段时间timedelta对象。改函数关键字参数都是可选的,不包括month或year
- total_seconds()方法用于timedelta对象返回的是一个timedelta对象表示的秒数
- strftime(format) 对象返回的是一个字符串,用format字非串的定制格式来表示datetime对象表示时间。
- datetime.datetime.strptime(time_string,format)函数返回一个datetime对象,他的时刻由time_string指定format字符串参数来解析。
多线程:
import threading,time
print('start of program')
def takeANap():
time.sleep(5)
print('wake up')
threadobj=threading.Thread(target=takeANap)
threadobj.start()
print('end of program')
threadobj=threading.Thread(target=print,args=['cat','dog','frogs'],kwargd={'sep':'&'})
#可以创建多个线程,让他们同时进行。但是多线程也可能导致所谓的并发问题。如果这些线程同时读写变量导致相互干扰,就会发生并发问题。
项目实例:
多线程XKCD下载程序
import request,os,bs4,threading
os.makdirs('xkcd',exit_ok=Ture)
def downloadxkccd(startComic,endComic):
for urlNumber in range(startComic,endComic):
print('Downloading page http://xkcd.com\%s..' %(urlNumber))
res=request.get(http://xkcd.com/%s'%s(urlnumber))
res.rasie_for_status()
soup=bs4.BeatifuSoup(res.text)
comicElem=soup.select('#comic img')
if comicElem==[]:
print('count not find comic image')
else:
comicUcl=comicElem[0].get('src')
print('downloading imag %s...'(comicUcl))
res=request.get(comicUcl)
res.raise_for_status()
imageFile=open(os.path.join('xkcd',os.path.basename(comiUcl)),'wb')
for chunk in res.iter_content(2000000):
imageFile.write(chunk)
imageFile.close()
downloadThreads=[]
for i in range(0,1400,100)
downloadThread=threafing.Thread(target=downloadxkcd,args=(i,i+99))
downloadThreads.append(downloadThread)
downloadThread.start()
for downloadThread in downloadThreads:
dowmloadThread.join()
print('done')
从python中启动其程序
import subprocess#导入模块
calcProc=subprocess.Popen('c:\\windows\\system32\\calc.exe')#启动计算机中的其他程序
calcProc.wait()#查看程序是否在执行
calcProc.poll()#如果程序执行将程序进行停止
subprocess.Popen('c:\\windows\\system32\\calc.exe','c:\\hello.txt')#参数传递在打开程序的时候也会打开文件
项目例子
简单的倒计时程序:
- 从60开始倒数
- 到时至0时开始播放文件(alarm.wav)
代码: - 在显示倒计时的每个数字之间,调用time.sleep()暂停一秒
- 调用subprocess.Popen使用默认的应用程序播放声音文件
代码:
import time,subprocess
timeLeft=60
while timeLeft >0:
print(timeLeft,end='')
time.sleep(1)
timeLeft=timeLeft-1
subprocess.Popen(['start','alarm.wav'],shell=True)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?