如何解决没有线程的Python任务计划程序
上下文
我目前正在基于fastapi
创建API类,该类将能够管理具有访问时间的令牌访问。
客观
我想在访问期结束时自动从授权令牌列表中删除令牌。
工作方式
我有一个主令牌,该令牌可随时用于通过给定路径生成访客令牌。还必须根据此格式向API提供特定时间:
API_URL / generate_token / MASTER_TOKEN / ACCESS_TIME
这将返回一个新的访客令牌,该令牌具有作为访问周期的给定“ access_time”值。
创建访客令牌后,我将其注册并在访问期结束时从Timer
中添加一个threading
,这将从已注册的令牌中删除该令牌。
问题
我不想通过计时器为每个新的来宾令牌创建一个新的“线程”,因为我希望主线程永久具有优先权。而且我担心这样一个事实,即如果我有很多来宾令牌,那么由于所有线程的优先级交换,该API的运行速度会很慢。
替代
我想到了sched
库。但这是一个问题,所有的预定任务都必须在我们用行开始先前创建的sheduler之前定义
scheduler.run()
问题在于,可以随时创建和注册新的访客令牌。所以我不知道如何正确处理它。
任何帮助或研究方向将不胜感激。
解决方法
每个令牌都没有计时器是明智的。
任何帮助或研究方向将不胜感激。
是否有一个线程负责删除过期的令牌,否则将其休眠?取决于您在那里需要多少精度(sleep
不提供超精确的唤醒保证)。
在POSIX上,您也可以使用SIGALRM(signal.alarm
),通常编写信号处理程序很复杂,但是IIRC Python会做自己的事情。
或者,只需将有效性信息附加到令牌上,然后检查是否有请求(可能是偶尔(例如每小时或每天)一次“收获”)进入请求时,该收获是否是单独的线程( (在计时器或其他任何计时器上),或者只是点击其中一个请求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。