Python—保持时间、计划任务和启动任务

本文介绍了Python中time模块的time.time()和time.sleep()函数,数字四舍五入的方法,datetime模块的使用,包括datetime.datetime()和datetime.timedelta(),以及如何进行多线程编程,特别是使用subprocess模块来创建新进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.time模块

 让Python程序能读取系统时钟的当前时间。在time模块中,time.time()和time.sleep()函数是最有用的模块。

1.1time.time()

返回值是 Unix 纪元的那一刻与 time.time() 被调用的那一刻之间的秒数。

import time
print(time.time())

运行结果

1553691989.450952 

纪元时间戳可以用于剖析代码,也就是测量一段代码的运行时间。

import time
def calc():
    p = 1
    for i in range(1,100000):
        p = p * i
    return p
startTime = time.time()
result = calc()
endTime = time.time()
print('The result is %s digit long.'%(len(str(result))))
print('运行时间为%s秒'%(endTime - startTime))

运行结果

The result is 456569 digit long.
            运行时间为2.7055039405822754秒 

1.2 time.sleep()

功能:让程序暂停
            格式:time.sleep(1),其中()内为让程序暂停的时间

2.数字四舍五入

     使用 round() 进行四舍五入

格式:round(x,y)
            功能:x 是要进行四舍五入的数字,y 是小数点后几位,是一个可选值,默认情况下四舍五入为整数。

import time
now = time.time()
print("未四舍五入:",now)
print("保留两位小数:",round(now,2))

运行结果

         未四舍五入: 1553692777.910951
         保留两位小数: 1553692777.91

3.datetime模块

    

datetime 模块有两个可以使用的数据类型: datetime 和 timedelta.

3.1关于 datetime.datetime()

格式:

datetime.datetime(2019, 3, 27, 21, 29, 0)

功能:

与 time.time() 显示时间戳不同,datetime.datetime() 表示具体的日期,其中的参数代表:年、月、日、时、分、秒。

其他:

  • datetime.datetime.now():返回一个 datetime object, 它包含了当前时刻的各种 datetime 属性。
  • datetime.datetime.fromtimestamp():接受一个时间戳,返回这个时间戳的 datetime 对象。
  • 使用 strftime() 作用在一个 datetime 对象上,可以得到定制的格式化字符串。
  • strptime() 的工作与 strftime() 的工作相反。
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2019, 3, 27, 21, 30, 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(2019, 3, 27, 21, 29, 38, 529726)

3.2关于 datetime.timedelta()

格式:

delta =datetime.timedelta(days=11, hours=10, minutes=9 ,seconds=0)

功能:

它接受 microseconds, milliseconds, seconds, minutes, hours, days, weeks 作为参数,用于表示一段时间。

其他:

  • 一个 datetime 对象将时间分别储存在天、秒、微妙中。
  • delta.total_seconds() 这个方法返回这个时间段的总共的秒数。
  • str(delta),返回一个比较易读的字符串。
  • 通过‘+’,‘-’ 进行 datetime 对象和 timedelta 对象的运算
  • 使用‘*’,’/‘可以是 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

3.3暂停至特定时间

>>> import datetime
>>> import time
>>> hello2019 = datetime.datetime(2019,3,29,0,0,0)
>>> while datetime.datetime.now() < hello2019:
    time.sleep(1)

3.4 将datetime对象转换为字符串 

4. 多线程

多线程指的是一个程序能够同时进行多处代码。创建,使用一个新线程需要用到 threading 模块。

关于创建新的 Thread

格式: threadObj = threading.Thread(target=nameOfFunction)
           功能:创建一个 Thread 对象,其中 target 为其参数,它的 value 是要执行的函数的名字。

使用新的线程

格式:threadObj.start()

创建 Thread 对象时传入的参数

常规参数:args,数据类型为列表
           关键字参数: kwargs, 数据类型为字典

>>> import threading
>>> threadObj = threading.Thread(target=print,args=['Cat','Dogs','Frogs'],kwargs={'sep':'&'})
>>> threadObj.start()
Cat&
>>> Dogs&Frogs

 

4.1 subprocess 模块

进程:

进程指的是一个应用程序的多个实例;进程之间相互独立,不能直接读写另一个进程的变量;一个进程可以包含多个线程。
           使用 subprocess 模块中的 Popen() 函数,可以打开其他进程,即打开应用程序

使用 subprocess.Popen() 打开其他应用程序

格式(在 Mac OS 上):subprocess.Popen(['open','/Application/Calculator.app/'])

Python中,定时任务可以通过多种方式实现,如使用标准库的`schedule`模块,第三方库如`APScheduler`或者更现代的方式使用`asyncio``APScheduler`结合。这里我会简要介绍一些基本的概念。 1. **schedule模块**: - `schedule.every().day.at("HH:MM")`可以用来设置每天指定时间触发的任务。 - 创建任务: ```python import schedule import time def job(): print("Job executed at:", time.strftime("%H:%M:%S")) schedule.every(1).seconds.do(job) # 每执行一次 while True: schedule.run_pending() time.sleep(1) # 程序睡眠1,直到有新的任务需要执行 ``` - 终止任务:无法直接停止`schedule`的执行,通常是在应用结束时自然停止。 2. **APScheduler**(异步版本): - 需要安装`apscheduler`库。 - 例子: ```python from apscheduler.schedulers.blocking import BlockingScheduler scheduler = BlockingScheduler() scheduler.add_job(func=job, trigger="interval", seconds=1) # 每执行一次 def shutdown_scheduler(): scheduler.shutdown() # 启动定时任务并注册一个关闭事件监听 try: scheduler.start() except (KeyboardInterrupt, SystemExit): shutdown_scheduler() ``` - 若要停止,可以直接调用`scheduler.shutdown()`。 3. **asyncio + APScheduler**: 如果你想在异步环境中使用定时任务,可以结合这两个库: ```python import asyncio from apscheduler.schedulers.asyncio import AsyncIOScheduler async def job(): print("Job executed") scheduler = AsyncIOScheduler() scheduler.add_job(asyncio.coroutine(job), 'interval', seconds=1) async def start_stop_scheduler(): await scheduler.start() # ...其他业务逻辑... await scheduler.shutdown() loop = asyncio.get_event_loop() loop.create_task(start_stop_scheduler()) loop.run_forever() ``` - 结束时,需要使用`shutdown`方法停止定时任务。 在以上所有情况中,通常都是在程序结束前手动关闭定时器,如果没有特殊需求,不需要额外的终止步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值