开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 925|回复: 11
收起左侧

[求助] python定时问题

[复制链接]
结帖率:82% (18/22)
发表于 2023-3-25 13:43:54 | 显示全部楼层 |阅读模式   北京市北京市
写了个定时任务,不过运行时发现经常卡死,找了几个解决办法,发现都没效果,不知道python定时怎么写才优雅一些?不用给出代码例子,给个方向就可以

job任务并不是非常耗时的

下面是我写的demo

if __name__ == '__main__':

    scheduler = BackgroundScheduler()

    scheduler.add_job(job, 'interval', seconds=5)

    scheduler.start()

    while True:
        time.sleep(5)

结帖率:100% (5/5)
发表于 2023-3-25 13:45:24 | 显示全部楼层   广西壮族自治区南宁市
job你用异步线程写的吗
回复 支持 反对

使用道具 举报

结帖率:100% (18/18)

签到天数: 1 天

发表于 2023-3-25 13:49:46 | 显示全部楼层   陕西省安康市
定时任务和循环等待,处理不当会导致卡死
使用 selectors 模块避免阻塞等待
[Python] 纯文本查看 复制代码
import selectors
import time

def job():
    """
    定时任务函数
    """
    print("Job is running at {}".format(time.time()))

# 创建选择器
selector = selectors.DefaultSelector()

# 注册事件,将程序从等待状态唤醒时执行job函数
selector.register(selector.get_event_loop(), selectors.EVENT_READ, job)

while True:
    # 阻塞等待事件回调
    events = selector.select(timeout=5)
    
    # 处理事件
    for key, mask in events:
        callback = key.data
        callback()
回复 支持 反对

使用道具 举报

结帖率:82% (18/22)

签到天数: 1 天

 楼主| 发表于 2023-3-25 13:52:16 | 显示全部楼层   北京市北京市
七彩色工作室 发表于 2023-3-25 13:45
job你用异步线程写的吗

不是 就普通的一个方法
回复 支持 反对

使用道具 举报

结帖率:100% (25/25)

签到天数: 24 天

发表于 2023-3-25 13:53:20 | 显示全部楼层   贵州省遵义市
[JavaScript] 纯文本查看 复制代码
您好,这是 Bing。根据网络搜索结果,这里给您一个利用 while True: + sleep() 实现定时任务的例子1:

import time
def task():
    print("Hello, world!")
while True:
    task()
    time.sleep(10) # 每隔 10 秒执行一次
这个例子中,定义了一个函数 task(),然后在一个无限循环中调用它,并且每次调用后使用 time.sleep(10) 暂停 10 秒。这样就实现了每隔 10 秒执行一次 task() 的定时任务。
回复 支持 反对

使用道具 举报

结帖率:82% (18/22)

签到天数: 1 天

 楼主| 发表于 2023-3-25 13:57:38 | 显示全部楼层   北京市北京市
qcby 发表于 2023-3-25 13:53
[mw_shl_code=javascript,true]您好,这是 Bing。根据网络搜索结果,这里给您一个利用 while True: + sleep ...

这个试过了..不大行
回复 支持 反对

使用道具 举报

结帖率:96% (24/25)

签到天数: 1 天

发表于 2023-3-25 13:57:49 | 显示全部楼层   上海市上海市
不知道,但是可以试试看用线程
回复 支持 反对

使用道具 举报

结帖率:100% (25/25)

签到天数: 24 天

发表于 2023-3-25 14:01:35 | 显示全部楼层   贵州省遵义市
iock 发表于 2023-3-25 13:57
这个试过了..不大行

[PHP] 纯文本查看 复制代码
好的,这里给您一个利用调度模块 schedule 实现定时任务的例子1:

import schedule
import time
def task():
    print("Hello, world!")
schedule.every(10).seconds.do(task) # 每隔 10 秒执行一次
while True:
    schedule.run_pending()
    time.sleep(1)
这个例子中,导入了 schedule 模块,然后使用 schedule.every(10).seconds.do(task) 定义了一个每隔 10 秒执行一次 task() 的定时任务。然后在一个无限循环中调用 schedule.run_pending() 来检查并运行所有已经到期的任务。
回复 支持 反对

使用道具 举报

结帖率:100% (25/25)

签到天数: 24 天

发表于 2023-3-25 14:05:39 | 显示全部楼层   贵州省遵义市
[Python] 纯文本查看 复制代码
好的,这里给您两个例子:

利用 threading 模块实现定时任务1:
import threading
def task():
    print("Hello, world!")
t = threading.Timer(10, task) # 创建一个 10 秒后执行 task() 的定时器
t.start() # 启动定时器
这个例子中,导入了 threading 模块,然后使用 threading.Timer(10, task) 创建了一个 10 秒后执行 task() 的定时器对象 t。然后调用 t.start() 启动定时器。

利用 APScheduler 模块实现定时任务2:
from apscheduler.schedulers.blocking import BlockingScheduler
def task():
    print("Hello, world!")
sched = BlockingScheduler() # 创建一个阻塞式调度器
sched.add_job(task, 'interval', seconds=10) # 添加一个每隔 10 秒执行一次的任务
sched.start() # 启动调度器
这个例子中,导入了 apscheduler.schedulers.blocking 模块,然后使用 BlockingScheduler() 创建了一个阻塞式调度器对象 sched。然后使用 sched.add_job(task, ‘interval’, seconds=10) 添加了一个每隔 10 秒执行一次的任务。最后调用 sched.start() 启动调度器。


没玩过py,这是bing给的例子 看看就好
回复 支持 反对

使用道具 举报

结帖率:100% (24/24)

签到天数: 1 天

发表于 2023-4-14 13:34:45 | 显示全部楼层   湖北省武汉市

[Python] 纯文本查看 复制代码
from apscheduler.schedulers.blocking import BlockingScheduler

def test():
    print('执行了一次')

if __name__ == '__main__':
    sched = BlockingScheduler()
    sched.add_job(test, 'interval', seconds=5) #每5秒执行一次
    sched.start()


不就是这样吗?
回复 支持 反对

使用道具 举报

  高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表