1、指定时间,每天定时运行
def func():
main_fun() ##主要的函数
#如果需要循环调用,就要添加以下方法
timer = threading.Timer(86400, func)
#timer = threading.Timer(180, func)
timer.start()
if __name__ == "__main__":
spmcs_conn = cx_Oracle.connect("%s","nbadv","%s",encoding = "UTF-8",nencoding = "UTF-8")
cur = spmcs_conn.cursor()
now_time = datetime.datetime.now()
now_day = now_time.date().day
# 获取明天时间
next_time = now_time + datetime.timedelta(days=+1)
next_year = next_time.date().year
next_month = next_time.date().month
next_day = next_time.date().day
# 获取明天3点时间
#next_time = datetime.datetime.strptime(str(next_year)+"-"+str(next_month)+"-"+str(next_day)+" 03:00:00", "%Y-%m-%d %H:%M:%S")
next_time = datetime.datetime.strptime(str(next_year)+"-"+str(next_month)+"-"+str(next_day)+" 07:00:00", "%Y-%m-%d %H:%M:%S")
# # 获取昨天时间
# last_time = now_time + datetime.timedelta(days=-1)
# 获取距离明天3点时间,单位为秒
timer_start_time = (next_time - now_time).total_seconds()
#print(timer_start_time)
# 54186.75975
#if timer_start_time >= 0:
#定时器,参数为(多少时间后执行,单位为秒,执行的方法)
timer = threading.Timer(timer_start_time, func)
timer.start()
2、隔一定时间运行程序
import datetime
import time
def doSth():
# 把爬虫程序放在这个类里
print(u"这个程序要开始疯狂的运转啦")
# 一般网站都是1:00点更新数据,所以每天凌晨一点启动
def main(h=1,m=0):
while True:
now = datetime.datetime.now()
# print(now.hour, now.minute)
if now.hour == h and now.minute == m:
doSth()
# 每隔60秒检测一次
time.sleep(60)
main()
import time
from apscheduler.schedulers.background import BackgroundScheduler
def job():
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
if __name__ == "__main__":
# BackgroundScheduler: 适合于要求任何在程序后台运行的情况,当希望调度器在应用后台执行时使用
scheduler = BackgroundScheduler()
# 采用非阻塞的方式
# 采用corn的方式
scheduler.add_job(job, "cron", day_of_week="fri", second="*/5")
"""
year (int|str) – 4-digit year
month (int|str) – month (1-12)
day (int|str) – day of the (1-31)
week (int|str) – ISO week (1-53)
day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun)
hour (int|str) – hour (0-23)
minute (int|str) – minute (0-59)
econd (int|str) – second (0-59)
start_date (datetime|str) – earliest possible date/time to trigger on (inclusive)
end_date (datetime|str) – latest possible date/time to trigger on (inclusive)
timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone)
* any Fire on every value
*/a any Fire every a values, starting from the minimum
a-b any Fire on any value within the a-b range (a must be smaller than b)
a-b/c any Fire every c values within the a-b range
xth y day Fire on the x -th occurrence of weekday y within the month
last x day Fire on the last occurrence of weekday x within the month
last day Fire on the last day within the month
x,y,z any Fire on any matching expression; can combine any number of any of the above expressions
"""
scheduler.start()
# 其他任务是独立的线程
while True:
print("main-start:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
time.sleep(2)
print("main-end:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
##https://www.jianshu.com/p/b77d934cc252
上面的链接里讲述了很多定时器
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
def job():
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
scheduler = BlockingScheduler()
scheduler.add_job(job,"cron",hour ="8",minute= "59")
scheduler.start()