写一个定时程序,线程始终后台执行。然后通过控制台或者 cmd 输入命令,添加新的定时任务。 这类的 python 程序都是通过什么写的啊
请教以下各位大佬。
1
ccdjh 2022-09-07 02:59:52 +08:00
|
2
LeeReamond 2022-09-07 07:50:51 +08:00
很简单,原教旨主义的程序是面向过程的,也就是逐条执行指令。你想要在这个基础上加上外部互动的功能,那你就需要额外再写一个能接收输入输出的过程,它可以以单独的一个线程或进程的形式存在。
|
3
lawsiki 2022-09-07 10:41:15 +08:00
用一个文件或数据库保存任务配置就行了,A 定时读取配置执行,B 添加任务的时候往配置写
|
4
chunhai OP @lawsiki 定时读取感觉这样写法有点奇怪增大了开销啊,而且添加这样做,删除和修改有点麻烦了啊。
我想实现像 docker 那样 通过 docker run 这样启动容器的方式该怎么写呢? |
5
chunhai OP @LeeReamond 这个过程的接收输入通过什么实现的啊
|
6
renmu 2022-09-07 11:48:41 +08:00 via Android
一个进程轮询执行,一个进程接收数据
|
10
LindsayZhou 2022-09-07 16:20:28 +08:00
配置文件,不是定时读取,用 inotify 监听文件变化,Python 有 SDK 的。
如果不希望加 inotify 依赖的话,Python 监听 HUP 信号,收到时重载配置。手动重载用 `kill -HUP [$pid]`。如果用 systemd 管理,加一行 `ExecReload=/bin/kill -HUP $MAINPID`。 以上都在说 Linux ,Windows 的话,我就不清楚了,我不太会用 Windows. |
11
LindsayZhou 2022-09-07 16:28:50 +08:00
# 10
以上说用配置文件是比较简便的方法,如果要比较复杂的交互,还是按楼上的说法开个线程接收数据,asyncio 开个 Task 什么的。 docker 默认是用的 Unix Socket 通信,也可以开 http 。 |
12
julyclyde 2022-09-07 16:30:14 +08:00
@lawsiki crontab 的编辑是另外进行的,然后覆盖到正式的文件名上; crond 每分钟发现一次文件是否变动;
其他服务器一般都是单独发信号通知重新加载配置文件的 你不能只看某些面板做到了这功能而不深究其原理啊 再说了,你的程序如果运行出毛病了,那些面板会为你负责么 |
13
ClericPy 2022-09-07 21:11:05 +08:00
IPC 的手段很多啊, 你说的 sys.stdin 一般就够了
复杂点的最近用了下 Unix domain socket, 那高并发杠杠的, 尤其是底层 asyncio 都包好了变成 Stream 的 Reader 和 Writer, 写啥都跟写 Pipe 一样. 或者你监控一个文件夹里出现新的 py 文件就导入它? 或者开个 HTTP 反正思路很多看你愿意怎么玩了, 不过看你的意思感情就是个随时拔插的一个 systemd / supervisor 啊... 那还不如丢一堆 alias 在 tmux 里随便折腾呢 |
15
rev1si0n 2022-09-08 15:24:25 +08:00
xml/jsonrpc
|