写一个定时程序,线程始终后台执行。然后通过控制台或者 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 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 |