Python 程序后台运行,如何写在控制台与他交互啊。怎么自定义命令

2022-09-07 01:49:38 +08:00
 chunhai

写一个定时程序,线程始终后台执行。然后通过控制台或者 cmd 输入命令,添加新的定时任务。 这类的 python 程序都是通过什么写的啊

请教以下各位大佬。

1862 次点击
所在节点    Python
15 条回复
ccdjh
2022-09-07 02:59:52 +08:00
你是需要这个?

https://python-rq.org/
LeeReamond
2022-09-07 07:50:51 +08:00
很简单,原教旨主义的程序是面向过程的,也就是逐条执行指令。你想要在这个基础上加上外部互动的功能,那你就需要额外再写一个能接收输入输出的过程,它可以以单独的一个线程或进程的形式存在。
lawsiki
2022-09-07 10:41:15 +08:00
用一个文件或数据库保存任务配置就行了,A 定时读取配置执行,B 添加任务的时候往配置写
chunhai
2022-09-07 11:32:21 +08:00
@lawsiki 定时读取感觉这样写法有点奇怪增大了开销啊,而且添加这样做,删除和修改有点麻烦了啊。
我想实现像 docker 那样 通过 docker run 这样启动容器的方式该怎么写呢?
chunhai
2022-09-07 11:34:38 +08:00
@LeeReamond 这个过程的接收输入通过什么实现的啊
renmu
2022-09-07 11:48:41 +08:00
一个进程轮询执行,一个进程接收数据
julyclyde
2022-09-07 11:56:06 +08:00
@chunhai 开个网络监听
julyclyde
2022-09-07 11:56:43 +08:00
@lawsiki 修改配置文件显然是个不靠谱的做法
如果程序读取的时候正在编辑怎么办
lawsiki
2022-09-07 14:09:23 +08:00
@julyclyde 通过程序去添加修改,不是人工编辑文本,像 crontab ,青龙面板这些的底层逻辑不就是这样么?
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.
LindsayZhou
2022-09-07 16:28:50 +08:00
# 10
以上说用配置文件是比较简便的方法,如果要比较复杂的交互,还是按楼上的说法开个线程接收数据,asyncio 开个 Task 什么的。
docker 默认是用的 Unix Socket 通信,也可以开 http 。
julyclyde
2022-09-07 16:30:14 +08:00
@lawsiki crontab 的编辑是另外进行的,然后覆盖到正式的文件名上; crond 每分钟发现一次文件是否变动;
其他服务器一般都是单独发信号通知重新加载配置文件的

你不能只看某些面板做到了这功能而不深究其原理啊
再说了,你的程序如果运行出毛病了,那些面板会为你负责么
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 里随便折腾呢
julyclyde
2022-09-08 10:11:46 +08:00
@ClericPy 出现一个新的就导入,需要有本地文件系统的权限才能注入新任务,这要求是不是太高了?
而且只能插不能拔
rev1si0n
2022-09-08 15:24:25 +08:00
xml/jsonrpc

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/878224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX