這是示例:
from concurrent.futures import ProcessPoolExecutor
import time
elapsed = 0
start_time = time.time()
func_args = [i for i in range(100)]
def func(x):
return x*x
if __name__ == '__main__':
while elapsed < 600:
with ProcessPoolExecutor() as executor:
for item in executor.map(
func,
func_args
):
print(item)
elapsed = time.time() - start_time
如何每隔 5 分鐘殺死并重新啟動此腳本?我認為使用 shell 的東西是可能的,但不確定在使用像這個腳本中這樣的并行行程時它是如何作業的。
如果你好奇為什么我想每 5 分鐘殺死并重新啟動這個腳本:在我的實際/生產代碼中,func()
是一個泄漏記憶體的函式。它需要大約 30 分鐘才能引起任何嚴重的問題,我想在此之前殺死并重新啟動整個腳本。我也在嘗試解決記憶體泄漏,所以這是一個臨時解決方案。
uj5u.com熱心網友回復:
您可以通過crontab
(另請參閱man crontab
)來做到這一點。該腳本將是一個簡單的 bash 腳本,例如:
#!/bin/bash
# kill running script
ps ax | grep bot.py | grep -v grep | awk '{print $1}' | xargs kill -9
# restart
/path/to/your_script.py & disown
crontab 條目(用 編輯crontab -e
)應如下所示:
*/5 * * * * /path/to/bash_script.sh
然而,恕我直言,一個更簡單的解決方案是在行程可以使用的記憶體上設定硬資源限制ulimit
(參見bash shell),以便在超過限制時將其殺死。help ulimit
然后,只需使用 bash 腳本回圈呼叫該腳本:
#!/bin/bash
# limit virtual memory to 500MB
ulimit -Sv 500000 -Hv 500000
while true; do
/path/to/your_script.py
sleep 1
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/471521.html
上一篇:在多個條件下使用sed