有没有办法运行可以以交互方式处理输入的python?没有用户输入。这样,方法可以被称为,无需导入并初始化脚本。
我有什么:
import very_heavy_package
very_heavy_package.initialize()
if very_heavy_package.check(input_file):
do_something()
else:
do_something_else()
我想要类似的东西:
import very_heavy_package
very_heavy_package.initialize()
@entry_point()
def check_something(input_file):
if very_heavy_package.check(input_file):
do_something()
else:
do_something_else()
import
和initialize()
行需要很长时间,但check_something()
几乎是即时的。我希望能够按需check_something()
多次,而无需全部执行完整的脚本。
我知道这可以用内置的服务器实现,但似乎有点矫枉过正。是否有更多"本地"这样做的方式?
这个例子特别是关于在Raspberry Pi Zero上的监控摄像头的图像中运行一些 Google Vision 处理。初始化脚本需要一些时间(~10秒),但是使API请求非常快(<100ms)。我希望实现快速响应时间。
答案 0 :(得分:0)
我不认为网络服务器有点矫枉过正。通过使用带有REST api的HTTP服务器,您使用的标准大多数人都会发现易于理解,使用和扩展。作为一个额外的优势,如果您想要自动使用您的工具,大多数自动化工具已经知道如何说REST和JSON。
因此,我建议您按照最初的想法使用http.server或诸如flask之类的库来创建一个带有REST api的小型,简洁的Web服务器。
答案 1 :(得分:0)
尝试python -im your_module
&#39;我&#39;旗帜是用于互动的,而且是用于互动的。 flag是for module。然后离开&#39; .py&#39;。
答案 2 :(得分:0)
我设法用信号解决了我的心血来潮。由于我不需要传递任何信息,只需触发一个功能,该功能可以解决我的需求。所以使用信号 python库和SIGUSR1
import signal
import time
import very_heavy_package
very_heavy_package.initialize()
def check_something():
input_file = get_file()
if very_heavy_package.check(input_file):
do_something()
else:
do_something_else()
signal.signal(signal.SIGUSR1, check_something)
while True:
# Waits for SIGUSR1
time.sleep(600)
现在我可以使用
从bash启动守护进程nohup python myscript.py &
并使用kill
pkill -SIGUSR1 -f myscript.py
<强>声明强>:
pkill
命令有点危险,它可能会产生不良影响(即杀死打开了myscript.py
的文本编辑器)。我应该研究杀死进程的更好方法。