python 执行完间隔3秒执行,python设置每秒输出一次

大家好,给大家分享一下python每隔一秒输出一个数字,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

Python实现定时任务

工作中可能需要周期性执行一些任务,俗称定时任务。Linux环境下,可以借助于系统自带的crontab完成定时任务学python什么书比较好。但是很多时候,开发人员可能并没有权限去操作crontab。而schedule是Python的轻量级定时任务解决方案,可以满足常定时采集数据,定时执行脚本程序等周期性任务需求。

安装

pip install schedule

按照某个时间间隔

每10分钟执行一次job函数

schedule.every(10).minutes.do(test)

每10秒执行一次job函数

schedule.every(10).seconds.do(test)

每10小时执行一次job函数

schedule.every(10). hours.do(test)

每10天执行一次job函数

schedule.every(10). days.do(test)

每10周执行一次job函数

schedule.every(10). weeks.do(test)

当every()没参数时默认是1小时执行一次job函数

schedule.every().hour.do(test)

当every()没参数时默认是分钟执行一次job函数

schedule.every().minute.do(test)

当every()没参数时默认是1秒执行一次job函数

schedule.every().second.do(test)

当every()没参数时默认是1天执行一次job函数

schedule.every().day.do(test)

当every()没参数时默认是1周执行一次job函数

schedule.every().week.do(test)

案例演示

from datetime import datetime
import time
import schedule


def job1(*args):
    print("I'm working...")
    with open('tasks', 'a') as f:
        f.write('[{}]{}\n'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'), 'msg'))


# 每隔5秒执行一次job1
schedule.every(5).seconds.do(job1)


if __name__ == '__main__':
    while True:
        # 启动服务
        schedule.run_pending()
        time.sleep(1)

按照一个固定的时间点

表示每天10:30执行任务

schedule.every().day.at("10:30").do(test)

每周一执行一次job函数

schedule.every().monday.do(test)

每周三13:15执行一次job函数

schedule.every().wednesday.at("13:15").do(test)

案例演示

from datetime import datetime

import time

import schedule

def job1(*args):

    print("I'm working...")

    with open('tasks', 'a') as f:

        f.write('[{}]{}\n'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'), 'msg'))

# 每天9:30执行任务

schedule.every().day.at('09:30').do(job1)

if __name__ == '__main__':

    while True:

        # 启动服务

        schedule.run_pending()

        time.sleep(1)

任务只执行一次

在任务最后加上这句话就行,return schedule.CancelJob

案例演示

import time

import schedule

def job_run_once(*args):

    print('Job run only once')

    return schedule.CancelJob

# 只执行一次任务

schedule.every(3).seconds.do(job_run_once)

if __name__ == '__main__':

    while True:

        schedule.run_pending()

        time.sleep(1)

多任务串行执行延迟问题

import datetime
import schedule
import time


def job1():
    print("I'm working for job1")
    time.sleep(2)
    print("job1:", datetime.datetime.now())


def job2():
    print("I'm working for job2")
    time.sleep(2)
    print("job2:", datetime.datetime.now())


def run():
    schedule.every(10).seconds.do(job1)
    schedule.every(10).seconds.do(job2)

if __name__ == '__main__':
    run()
    while True:
        schedule.run_pending()
        time.sleep(1)

解决方法

import datetime

import schedule

import threading

import time

def job1():

    print("I'm working for job1")

    time.sleep(2)

    print("job1:", datetime.datetime.now())

def job2():

    print("I'm working for job2")

    time.sleep(2)

    print("job2:", datetime.datetime.now())

def job1_task():

    threading.Thread(target=job1).start()

def job2_task():

    threading.Thread(target=job2).start()

def run():

    schedule.every(10).seconds.do(job1_task)

    schedule.every(10).seconds.do(job2_task)

if __name__ == '__main__':

    run()

    while True:

        schedule.run_pending()

        time.sleep(1)

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值