ucanuupnobb
ucanuupnobb copied to clipboard
【代码】重复执行某个任务,并实现一定程度的控制次数和随机
我在实战中经常遇到一个情况,即在很长的一段时间内,比如数日、数月地重复执行某个脚本,并非连续执行,每次执行有时间间隔。摸索实践下来,共有 3 种解决方案:
- 利用操作系统自带的“计划任务”
- 写一个自己调用自己的函数
- 利用第三方库:apscheduler
如何设定操作系统自带的“计划任务”,我已经写了一篇笔记:《windows 10 如何设定计划任务自动执行 python 脚本?》
该方式的好处是,自己不在电脑前,也可设定电脑自动开机执行指定任务。尤其是持续数月的某些脚本,譬如,我会每天抓取一次自己在csdn的文章浏览量数据,或每天分几个时段抓取一下知乎指定话题下有哪些热门问题。
不过即便掌握了设定计划任务这个技能,依然会用到第二个方法:
import your_model as yours
import time
import random
def repeat_myself(how_many_times = 10):
print('--------',how_many_times,'----------')
# 被封装的核心代码
yours.one_def()
# 自循环减 1 ;如果剩余次数是0,则终止自循环
how_many_times += -1
if how_many_times == 0:
print(datetime.datetime.now(),'stop it.')
return
# 每次调用设定一个时间间隔
print(datetime.datetime.now(),'have a rest')
how_long = random.randint(30,120)
time.sleep(how_long)
return repeat_myself(how_many_times)
# 该参数可视具体业务需要,自己设定。
repeat_myself(12)
先把核心的业务写在一个 your_model .py
文件里,然后新建一个this_sample.py
文件来调用该业务。在设定计划任务时,直接把this_sample.py
设为执行对象即可。这将让执行的频率、周期控制更加灵活。
如果是短期内重复,比如 48 H 内多次间隔执行,那么直接用上述自重复代码而不必用到计划任务了。
其实以上说辞,均无需记忆。当你有这个间歇重复执行的脚本时,知道有以上几种方式然后再具体掌握即可,现在只需知道有这样的线索。