python程序中斷然后接著中斷代碼繼續(xù)運(yùn)行問題
前言
python通過(guò)django,flask框架開發(fā)運(yùn)維管理的時(shí)候,碰到的一個(gè)功能可能涉及很多個(gè)模塊,里面涉及了多個(gè)表數(shù)據(jù),如果前面的運(yùn)行都很不錯(cuò),但是中間一旦報(bào)錯(cuò)了,這就很煩,程序退出了,需要重新再來(lái)一遍,數(shù)據(jù)也需要重新清洗。
如果有一個(gè)很好的選擇可以讓程序在在有問題的模塊部位中止,主進(jìn)程一直不退出繼續(xù)保持運(yùn)行狀態(tài),處理好有問題的模塊之后運(yùn)行下面沒問題的模塊即可
import time
import psutil
import datetime,os
pause=psutil.Process(os.getpid())
from jielong import GoodMessage
msg=None
try:
print("程序啟動(dòng)時(shí)間:",datetime.datetime.now())
g=GoodMessage('狗',10)
with open('drink.txt','w+',encoding='gbk') as f:
msg=g.drink(20)
f.write(msg)
except Exception as e:
print("程序出異常了所以需要暫停當(dāng)前進(jìn)程ID是:{}".format(os.getpid()))
pause.suspend()
with open('drink.txt','r+') as f:
msg=f.read()
for i in range(5):
print(f"執(zhí)行時(shí)間是{datetime.datetime.now()}")
print(msg)
time.sleep(2)
運(yùn)行結(jié)果
程序啟動(dòng)時(shí)間: 2022-05-26 11:08:03.661051
執(zhí)行時(shí)間是2022-05-26 11:08:03.663050
動(dòng)物都要喝水,狗每次喝10L水
執(zhí)行時(shí)間是2022-05-26 11:08:05.667317
動(dòng)物都要喝水,狗每次喝10L水
執(zhí)行時(shí)間是2022-05-26 11:08:07.671946
動(dòng)物都要喝水,狗每次喝10L水
執(zhí)行時(shí)間是2022-05-26 11:08:09.677413
動(dòng)物都要喝水,狗每次喝10L水
執(zhí)行時(shí)間是2022-05-26 11:08:11.686922
動(dòng)物都要喝水,狗每次喝10L水
jielong.py
class GoodMessage(object):
def __init__(self,name,age):
self.name=name
self.age=age
def drink(self,vol):
return "動(dòng)物都要喝水,{}每次喝{}L水".format(self.name,10)
下面模擬jielong模塊出錯(cuò)的問題
import time
import psutil
import datetime,os
pause=psutil.Process(os.getpid())
from jielong import GoodMessage
msg=None
try:
print("程序啟動(dòng)時(shí)間:",datetime.datetime.now())
g=GoodMessage('狗',10)
with open('drink.txt','w+',encoding='gbk') as f:
msg=g.drink()
f.write(msg)
except Exception as e:
print("程序出異常了所以需要暫停當(dāng)前進(jìn)程ID是:{}".format(os.getpid()))
pause.suspend()
with open('drink.txt','r+') as f:
msg=f.read()
for i in range(5):
print(f"執(zhí)行時(shí)間是{datetime.datetime.now()}")
print(msg)
time.sleep(2)

可以看出程序已經(jīng)hang住了
此時(shí)的drink.txt文件也已經(jīng)為空了,這里可以把drink.txt當(dāng)作保存處理結(jié)果的一個(gè)文檔,因?yàn)楫惓A宋覀兪謩?dòng)處理下這個(gè)文檔,給這個(gè)里面加上如果程序沒有異常正常返回的結(jié)果,生產(chǎn)環(huán)境可能是數(shù)據(jù)庫(kù)保存這些數(shù)據(jù),然后在讀取
上面的進(jìn)程ID是9016
我們可以在cmd窗口直接連接到這個(gè)進(jìn)程,然后讓程序啟動(dòng)起來(lái)

執(zhí)行結(jié)果
程序啟動(dòng)時(shí)間: 2022-05-26 11:15:53.337709
程序出異常了所以需要暫停當(dāng)前進(jìn)程ID是:2868
執(zhí)行時(shí)間是2022-05-26 11:17:39.144744
動(dòng)物都要喝水,狗每次喝10L水
執(zhí)行時(shí)間是2022-05-26 11:17:41.154257
動(dòng)物都要喝水,狗每次喝10L水
執(zhí)行時(shí)間是2022-05-26 11:17:43.167452
動(dòng)物都要喝水,狗每次喝10L水
執(zhí)行時(shí)間是2022-05-26 11:17:45.173947
動(dòng)物都要喝水,狗每次喝10L水
執(zhí)行時(shí)間是2022-05-26 11:17:47.183822
動(dòng)物都要喝水,狗每次喝10L水Process finished with exit code 0
可以看出來(lái)中斷的程序的確可以繼續(xù)運(yùn)行下去
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python機(jī)器學(xué)習(xí)實(shí)現(xiàn)決策樹
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)實(shí)現(xiàn)決策樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
淺談Keras中shuffle和validation_split的順序
這篇文章主要介紹了淺談Keras中shuffle和validation_split的順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python Serial串口基本操作(收發(fā)數(shù)據(jù))
這篇文章主要介紹了Python Serial串口基本操作(收發(fā)數(shù)據(jù)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
使用Python編寫簡(jiǎn)單的端口掃描器的實(shí)例分享
這篇文章主要介紹了使用Python編寫簡(jiǎn)單的端口掃描器的實(shí)例分享,文中分別介紹了單線程和多線程的實(shí)現(xiàn)方式,需要的朋友可以參考下2015-12-12

