Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.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在不使用cron的情况下每x小时执行一次脚本?_Python - Fatal编程技术网

如何让python在不使用cron的情况下每x小时执行一次脚本?

如何让python在不使用cron的情况下每x小时执行一次脚本?,python,Python,如何创建一个python脚本,其中包含我希望每24小时作为一个单独的进程/线程执行的函数,如function1、function2和function3?所以说 主应用程序执行函数1、函数2 function1和function2在主应用程序的单独线程中执行一些长时间运行的进程 函数1完成任务后,向主应用程序报告它已完成的任务 主应用程序打印“使用函数1完成” 函数2完成任务后,向主应用程序报告它已完成的任务 功能1完成后24小时。。。主应用程序将再次执行它 功能2完成后6小时。。。主应用程序将再

如何创建一个python脚本,其中包含我希望每24小时作为一个单独的进程/线程执行的函数,如function1、function2和function3?所以说

主应用程序执行函数1、函数2 function1和function2在主应用程序的单独线程中执行一些长时间运行的进程 函数1完成任务后,向主应用程序报告它已完成的任务

主应用程序打印“使用函数1完成” 函数2完成任务后,向主应用程序报告它已完成的任务

功能1完成后24小时。。。主应用程序将再次执行它 功能2完成后6小时。。。主应用程序将再次执行该功能

请注意,这些函数将执行类似的操作,但数据源不同,因此不希望使用单独的应用程序和cron。
示例将非常好。

为什么要将其设置为每小时启动一次线程的应用程序呢。为什么不做一个简单的cron作业(或者如果你在MS-box上,做类似的事情),然后每个函数将其“使用functionX完成”写入一个日志文件

您的crontab看起来像:

0 0 * * * function1.py >> log1
0 0 * * * function2.py >> log2

如果你的剧本里有一句话。如果没有,请将“function1.py”替换为“python function1.py”。

如果您在应用程序中需要它,
alarm()
是一个很好的起点,处理程序应该
fork()
自身关闭。如果您需要以不同的时间间隔同步不同的功能,
PriorityQueue
非常好,因为您只能维护一个报警。中有一个工作的
报警()
示例


否则,我可能会使用单独的应用程序,而不是函数,并通过
crontab

触发它们。您是否尝试过
import time
?应用程序如何将“执行函数作为报告回主应用程序(执行者)的单独进程执行?”,它将知道何时开始计数以进行另一次更新。请注意,我不需要用于此更新的cron。“您可能想尝试使用Why-not You want
cron
?有什么你需要的东西它做不到吗?如果是这样的话,您是否考虑过其他可以这样做的调度器?或者,您运行的是某种嵌入式纯Python系统,没有底层操作系统?或者…什么?“拥有独立的应用程序”并不是一个真正的问题。独立的应用程序可以与所有那些“功能…做相似的事情”共享一个模块+1,实际上,
cron
可能是OP想要的,尽管他这么说……但有一点小错误:我建议使用
多处理
而不是
分叉
,特别是如果你想这样做的话“返回主应用程序”。@abarnert:呃,我想我是老同学了:P我不知道
多处理
,但它看起来像
fork()
的包装,添加了一些细节(比如
shmem
)的接口。(我不是Pythonista,所以我不知道所有的libs。)然而,OP说他只想“完成函数1”“,
fork()
+
SIGCHLD
应该足够了。除了它可以在非POSIX平台(如Windows)上工作,或者在没有SysV shmem的POSIX平台上工作之外,它还可以与多台计算机网格一起工作,让您可以将Python对象实际放入共享内存中(尝试手动操作——我想这就是我头发掉的原因……),并抽象出许多其他复杂的东西,是的,我想你可以说它只是
fork()
的包装器。但是,由于它抽象的一个复杂的事情是从分叉函数返回一个值,而OP明确要求这样做,并且可能自己不知道如何做……PS,正如我所说,我做了+1你的答案,我并不是想说你不能用
os.fork
或任何东西正确实现这一点,只是鉴于他的问题所暗示的知识水平,我不希望OP能够做到这一点,这就是为什么我建议
多处理
@abarnert:不,不要误解我,
多处理
可能是一种更好的方法。我只是不知道,谢谢你告诉我。(显然,正如我所指出的,Python除了在
多处理
中之外,似乎没有“独立的”
shmem
绑定,而且可能还有其他细节。)