Python学习笔记(十三)——保持时间、计划任务和启动程序以及多线程
2018-02-13 23:19
751 查看
time模块
time.time()函数
>>> import time >>> time.time() 1518508607.2039714
计算程序的运行时间
import time def func(): p = 1 for i in range(1,100000): p = p * i return p startTime = time.time() result = func() endTime = time.time() print('The result is %s digit long.'%(len(str(result)))) print('运行时间为%s秒'%(endTime - startTime))
time.sleep()
time.sleep(1)
数字四舍五入
>>> import time >>> now = time.time() >>> now 1518509648.6278894 >>> round(now) 1518509649 >>> round(now,2) 1518509648.63 >>> round(now,4) 1518509648.6279
小实验——超级秒表
#! python3 #stopwatch.py - #Usage: # #Author : qmeng #MailTo : qmeng1128@163.com #QQ : 1163306125 #Blog : http://blog.csdn.net/Mq_Go/ #Create : 2018-02-13 16:18:46 #Version: 1.0 # import time print('Press ENTER to begin.Afterwards,\npress ENTER to "click" the stopwatch \nPress Ctrl+C to quit.') input() print('Started...') startTime = time.time() lastTime = startTime lapNum = 1; #记录并打印单圈时间 try: while True: input() temp = time.time() lapTime = round(temp-lastTime,2) lastTime = temp totalTime = round(time.time()-startTime,2) print('第 %s 圈,用时 %s 秒,总用时 %s 秒'%(lapNum,lapTime,totalTime)) lapNum += 1 except KeyboardInterrupt: print('\nDone')
datetime模块
>>> import datetime >>> datetime.datetime.now() datetime.datetime(2018, 2, 13, 16, 46, 43, 329479) >>> dt = datetime.datetime(2015,10,21,16,29,0) >>> dt datetime.datetime(2015, 10, 21, 16, 29) >>> dt.year,dt.month (2015, 10) >>> dt.minute 29
>>> datetime.datetime.fromtimestamp(1000000) datetime.datetime(1970, 1, 12, 21, 46, 40) >>> datetime.datetime.fromtimestamp(time.time()) datetime.datetime(2018, 2, 13, 16, 50, 38, 529726)
timedelta数据类型
>>> delta = datetime.timedelta(days = 11,hours = 10 ,minutes = 9,seconds=8) >>> delta.days 11 >>> delta.seconds 36548 >>> delta.hours Traceback (most recent call last): File "<pyshell#26>", line 1, in <module> delta.hours AttributeError: 'datetime.timedelta' object has no attribute 'hours' >>> delta.microseconds 0
delta = datetime.timedelta()接受的关键字为,
weeks,days,hours,minutes,seconds,milliseconds,microseconds
这些数字保存在
days,seconds、microseconds
>>> dt = datetime.datetime.now() >>> dt datetime.datetime(2018, 2, 13, 17, 5, 54, 408274) >>> thousandDays = datetime.timedelta(days=1000) >>> dt+thousandDays datetime.datetime(2020, 11, 9, 17, 5, 54, 408274)
>>> sTime = datetime.datetime(2018,2,13,17,9,0) >>> ThirtyYears = datetime.timedelta(days=365*30) >>> sTime - ThirtyYears datetime.datetime(1988, 2, 21, 17, 9) >>> sTime - (2*ThirtyYears) datetime.datetime(1958, 2, 28, 17, 9)
暂停至特定时间
>>> import datetime >>> import time >>> hello2018 = datetime.datetime(2018,2,15,0,0,0) >>> while datetime.datetime.now() < hello2018: time.sleep(1)
将datetime对象转换为字符串
strftime指令 | 含义 |
---|---|
%Y | 四位数的年份 |
%y | 两位是的年份 |
%m | 数字表示的月份,01-12 |
%B | 完整的月份,例如’November’ |
%b | 简写的月份,例如‘Nov’ |
%d | 一月中的第几天,01-31 |
%j | 一年中的第几天,001-366 |
%w | 一周中的第几天,0(周日)-6(周六) |
%A | 完整的周几,例如‘Monday’ |
%a | 缩写的周几,eg:Mon |
%H | 小时(00-23)hopur |
%h | 小时(00-12)hour |
%M | 分(00-59)minutes |
%S | 秒(00-59)second |
%p | ‘AM’或者‘PM’ |
%% | 就是‘%’字符 |
>>> oct = datetime.datetime.now() >>> oct.strftime('%Y/%m/%d %p %I:%M:%S') '2018/02/13 PM 08:30:19' >>> oct.strftime('%B of %y') 'February of 18' >>> oct.strftime('%j/365 %d/%m %w/week') '044/365 13/02 2/week'
将字符串转换成datetime对象
>>> oct.strftime('%B %d %Y') 'February 13 2018' >>> datetime.datetime.strptime('February 13 2018','%B %d %Y') datetime.datetime(2018, 2, 13, 0, 0)
多线程
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.')
向线程的目标函数传递参数
如果要向新线程中的函数传递参数,就需要使用threading.Thread()函数的
args和
kwargs关键字参数
>>> import threading >>> threadObj = threading.Thread(target=print,args=['Cat','Dogs','Frogs'],kwargs={'sep':'&'}) >>> threadObj.start() Cat& >>> Dogs&Frogs
并发问题
小实验——多线程下载XKCD
#! python3 # mulitdownloadXkcd.py - # Usage: # # Author : qmeng # MailTo : qmeng1128@163.com # QQ : 1163306125 # Blog : http://blog.csdn.net/Mq_Go/ # Create : 2018-02-13 21:31:39 # Version: 1.0 # import requests,os,bs4,threading os.makedirs('XKCD',exist_ok=True) def downloadXkcd(startComic,endComic): #Download rhe page for urlNumber in range(startComic,endComic): print('Downloading page http://xkcd.com/%s...\n'%(urlNumber)) res = requests.get('http://xkcd.com/%s'%(urlNumber)) try: res.raise_for_status() except requests.exceptions.HTTPError: print('Not Found for url: https://xkcd.com/0') continue soup = bs4.BeautifulSoup(res.text,"html.parser") #find the url od the comic image comicElem = soup.select('#comic img') if comicElem == []: print('Could not find comic image '+ urlNumber +'...\n') else: comicUrl = comicElem[0].get('src') comicUrl = 'http:'+ comicUrl print('Downloading image %s...'%(comicUrl)) res = requests.get(comicUrl) res.raise_for_status() imageFile = open(os.path.join('XKCD',os.path.basename(comicUrl)),'wb') for chunk in res.iter_content(100000): imageFile.write(chunk) imageFile.close() #创建并启动线程 downloadThreads = [] #a list of all the Thread objects for i in range(0,1400,100): downloadThread = threading.Thread(target=downloadXkcd,args=(i,i+3)) downloadThreads.append(downloadThread) downloadThread.start() #等待所有的线程结束 for downloadThread in downloadThreads: downloadThread.join() print('Done...')
从Python启动其他程序
打开计算器>>> import subprocess >>> subprocess.Popen('C:\\windows\\System32\\calc.exe') <subprocess.Popen object at 0x00000229D62884A8>
>>> import subprocess >>> subprocess.Popen('C:\\windows\\System32\\calc.exe') <subprocess.Popen object at 0x00000229D62884A8>
>>>
>>> re = subprocess.Popen('C:\\windows\\System32\\calc.exe')
>>> re.poll() == None
True
>>> re.poll()
0
>>> re.wait()
0
向Popen()传递命令行参数
>>> subprocess.Popen([r'D:\install\Sublime Text 3\sublime_text.exe',r'D:\python\abcdef.py']) <subprocess.Popen object at 0x00000284552A8860>
用默认程序打开
>>> subprocess.Popen(['start','D:\\python\\dictionary.txt'],shell=True) <subprocess.Popen object at 0x00000284552A8AC8>
小实验——简单的倒计时程序
相关文章推荐
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第15章 保持时间,计划任务和启动程序】
- python学习笔记(十三): 多线程多进程
- python最简单的小程序-计算行车时间-学习笔记6
- python学习笔记-记录程序运行时间
- live555学习笔记4-计划任务(TaskScheduler)深入探讨
- 学习笔记:TimeSpan(时间片),以及各种时间差的算法
- c++0x 学习笔记 2 ---- 多线程(1) -- 启动线程
- c# 仿照计划任务(定时提示、定时运行程序、定时打开url(前台/后台))/每天/每周/每月/一次 多时间段
- c# 仿照计划任务(定时提示、定时运行程序、定时打开url(前台/后台))/每天/每周/每月/一次 多时间段
- IBM DB2学习笔记:日期以及时间的使用
- java学习笔记---第一个applet程序以及一个小问题的解决
- Linux 的计划任务学习笔记
- Python学习笔记整理(十三)Python模块
- 原创-IBM DB2学习笔记-1:日期以及时间的使用
- 使用系统自带的任务计划程序每天启动Emails服务器(Win7)
- asp.net 计划任务管理程序实现,多线程
- at 命令来安排命令、脚本或程序在指定的日期和时间运行。您也可以使用此命令查看现有的计划任务。
- IBM DB2学习笔记:日期以及时间的使用
- live555学习笔记4-计划任务(TaskScheduler)深入探讨
- asp.net 计划任务管理程序实现,多线程任务加载