簡體   English   中英

Python優雅地停止了Laravel / Php中的腳本

[英]Python gracefully stop a script from Laravel/Php

我正在尋找一種從我從Laravel應用程序啟動的長時間運行的python腳本中正常退出的方法。

我這樣做的實際過程是:

  • 從Laravel在MySql表數據庫中將'script_state'設置為1
  • 通過shell_exec啟動python腳本
  • python腳本通過MySql查詢定期檢查“ script_state”。 如果將其更改為0(有意從我的Laravel應用中更改),則可以正常退出腳本

shell_exec檢索pid然后執行kill可能是一種選擇,但是我實際上不希望腳本優雅地停止並退出。

我的實際配置有效,但我正在尋找更好的方法。

shell_exec檢索pid然后執行kill可能是一種選擇,但是我實際上不希望腳本優雅地停止並退出。

這可能是您最好的選擇。 您可以使用SIGTERM禮貌地要求腳本退出:

SIGTERM信號是用於導致程序終止的通用信號。 SIGKILL不同,此信號可以被阻止,處理和忽略。 這是禮貌地要求程序終止的正常方法。

這實際上是在GUI應用程序中單擊關閉按鈕時發生的情況。

在您的Python代碼中,您可以使用signal模塊以及所需的任何清除邏輯來處理SIGTERM ,然后退出:

 import signal, os def handler(signum, frame): print('Signal handler called with signal', signum) raise OSError("Couldn't open device!") # Set the signal handler and a 5-second alarm signal.signal(signal.SIGALRM, handler) signal.alarm(5) # This open() may hang indefinitely fd = os.open('/dev/ttyS0', os.O_RDWR) signal.alarm(0) # Disable the alarm 

另請參見此堆棧溢出答案 ,以了解在退出之前要清理的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM