Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不带线程的Python任务调度器_Python_Python 3.x_Asynchronous_Scheduled Tasks - Fatal编程技术网

不带线程的Python任务调度器

不带线程的Python任务调度器,python,python-3.x,asynchronous,scheduled-tasks,Python,Python 3.x,Asynchronous,Scheduled Tasks,上下文 我目前正在做一个基于fastapi的API类,它将能够根据访问时间管理令牌访问 目标 我想在访问期结束时自动从授权令牌列表中删除令牌 工作情况如何 我有一个主令牌,可用于通过给定路径随时生成来宾令牌。还必须根据以下格式向API提供特定时间: API\u URL/生成\u令牌/主\u令牌/访问\u时间 这将返回一个新的来宾令牌,其访问周期为给定的“访问时间”值 创建来宾令牌后,我将其注册,并在访问期结束时从线程中添加计时器,该计时器将从注册令牌中删除令牌 问题 我不想通过计时器为每个新的来

上下文

我目前正在做一个基于
fastapi
的API类,它将能够根据访问时间管理令牌访问

目标

我想在访问期结束时自动从授权令牌列表中删除令牌

工作情况如何

我有一个主令牌,可用于通过给定路径随时生成来宾令牌。还必须根据以下格式向API提供特定时间:

API\u URL/生成\u令牌/主\u令牌/访问\u时间

这将返回一个新的来宾令牌,其访问周期为给定的“访问时间”值

创建来宾令牌后,我将其注册,并在访问期结束时从
线程中添加
计时器
,该计时器将从注册令牌中删除令牌

问题

我不想通过计时器为每个新的来宾令牌创建一个新的“线程”,因为我希望主线程具有永久的优先级。我担心的是,如果我有很多来宾令牌,那么由于所有线程的优先级交换,API会慢很多

备选方案

我想到了
sched
库。但是这一个提出了一个问题,即在我们使用该行启动先前创建的调度程序之前,必须定义所有计划任务

scheduler.run()
问题是,可以随时创建和注册新的来宾令牌。所以我不知道如何正确处理它


任何帮助或研究都将不胜感激。

每个令牌没有计时器是明智的

任何帮助或研究都将不胜感激

是否有一个线程负责删除过期的令牌,或者将其休眠?取决于您需要的精确度(
sleep
不提供超精确的唤醒保证)

在POSIX上,您还可以使用SIGALRM(
signal.alarm
),通常编写信号处理程序很复杂,但IIRC Python有自己的功能


或者,只需将有效性信息附加到令牌上,并检查当请求传入时,可能每隔一段时间(例如,每小时或每天)进行一次“收获”,该收获是否是一个单独的线程(在计时器上或任何东西上)或只是对其中一个请求的点击。

我可能会选择您最后的解决方案,这就是我刚才想的,我将检查每个请求的有效性,并执行一个“垃圾收集器”线程,该线程将删除定期过期的令牌。我已经在每个代币上附上了到期日期,所以它很容易实现!非常感谢。