[英](Python) Blocking sub-process
我有一個腳本類,可以從數據庫查詢並顯示結果。 問題是當我在腳本下面添加子進程時,腳本掛起(或等待,如果以ctr-c終止,它將繼續)
例如。 如果刪除了組B,則將運行組A。 如果刪除了A組,則B組將運行
#Group A
queryStrings = ['SELECT top 100 * FROM myDb',
'SELECT top 10 * FROM anotherDb']
## class that connects to db and output the content ##
db = Database
conn = db.connectToDb()
for query in queryStrings:
db.runPreQueries(conn, query)
conn.close
##Group B
if os.path.exists("DoSomething.vbs"):
p = subprocess.Popen("cscript DoSomething.vbs", stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
stdout, stderr = p.communicate()
print("vbs completed")
我也嘗試使用subprocess.call,然后終止它。 這不會掛起,但不會執行腳本
p = subprocess.call("cscript DoSomething.vbs")
p.terminate()
當運行conn.close
您並沒有真正關閉數據庫。 它什么都不做,因為您沒有調用該函數。
因此,下一個呼叫將保持阻塞狀態,等待數據庫訪問。
固定:
conn.close()
請注意,隨后運行流程的正確方法是(因為您不關心輸入,輸出...):
subprocess.check_call(["cscript","DoSomething.vbs"])
如果cscript
返回一個非零的返回碼(足夠安全),這將失敗。
請注意,您的數據庫接口可能支持上下文管理器,在這種情況下,最好編寫以下代碼:
with db.connectToDb() as conn:
for query in queryStrings:
db.runPreQueries(conn, query)
在這種情況下,退出with
塊時將自動關閉連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.