为了账号安全,请及时绑定邮箱和手机立即绑定

线程在 python 中中断睡眠(来自 java 的端口)

线程在 python 中中断睡眠(来自 java 的端口)

侃侃尔雅 2023-02-22 15:13:59
我有以下 Java 类,我想(在概念上)移植到 python。这个想法是你有一个闹钟线程,它会休眠 x 秒(直到第二天早上),除非设置了新的唤醒时间,此时休眠线程被中断,新的剩余时间被设置并且它在那个时间休眠。如果完成休眠,则触发闹钟声音并等待设置新的唤醒时间我想将它移植到 Python,但我只花了几个小时在谷歌上搜索,虽然有 1001 种方法可以在 Python 中管理线程和休眠,但我找不到如何让 sleep() 持续 x 秒但也发送中断的方法。需要明确的是,我不需要有人为我编写整个类,只需一个简单的睡眠和中断示例就足够了,这样我就可以理解它在 Python 中的完成方式。package com.njitram.bedroomtunes.server.alarm;import java.text.SimpleDateFormat;import java.util.Calendar;import com.njitram.bedroomtunes.log.Logger;public class AlarmThread extends Thread {    private Calendar wakeupTime;    private Alarm alarm;        /*     * Constructor to disable the alarm     */    public AlarmThread(Alarm alarm) {        this(null, alarm);    }        public AlarmThread(Calendar wakeupTime, Alarm alarm) {        this.alarm = alarm;        if(wakeupTime == null) {            disable();        } else {            setNewWakeUpTime(wakeupTime);        }        this.start();    }        public void setNewWakeUpTime(Calendar wakeupTime) {        Logger.log("New Wake time set for AlarmThread: " + new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(wakeupTime.getTime()));        this.wakeupTime = wakeupTime;        // If the thread was already started, it will be sleeping. Wake it up and recalculate how long it needs to sleep. Interrupting will achieve this.        this.interrupt();    }        public void disable() {        setNewWakeUpTime(getDisabledTime());    }        private Calendar getDisabledTime() {        // The idea is to disable the alarm. If the alarm eventually goes off in the year 3000, I deserve to wake up...        Calendar wakeupTime = Calendar.getInstance();        wakeupTime.set(Calendar.YEAR, 3000);        return wakeupTime;    }   
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

APScheduler包似乎提供您正在寻找的功能。用户指南应包含有关设置和删除计划所需的所有功能的信息。

请注意,这与您的睡眠方法不同,它使用调度来代替 - 尽管我建议不要“忙着睡觉”,因为它会浪费 CPU 周期


查看完整回答
反对 回复 2023-02-22
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信