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) 

posted on   寂寞梧桐#  阅读(255)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示