2017-08-02 148 views
0

我有一個用Python編寫的輪詢作業,每15分鐘執行一次,以檢查作業表中條目的狀態是否爲True。如果狀態爲true,那麼我需要從表中獲取值並將它們作爲參數傳遞給另一個執行某些操作的腳本。Python:在創建子進程後終止父進程

我正在Python的Multiprocessing模塊中使用Process創建子進程,但我無法在啓動這些進程後退出輪詢作業(父腳本)。輪詢工作一直在等待,直到孩子完成爲止,即使在創建孩子後寫了一個sys.exit()

#pollingjob.py 
import sys 
import multiprocessing 
from multiprocessing import Process 
from secondscript import secondscriptfunction 

def createParallelBatches(a,b,c): 
    for i in [1,2,3]: 
     p1 = Process(target=secondscriptfunction,args=(a,b,c)).start() 
    sys.exit() 

if __name__=='__main__': 
    # Check the table for *status=True* rows 
    # If such rows exit call CreateParallelBatches with the column values 

什麼我不理解的是,爲什麼sys.exit()不會讓我退出程序離開產生的進程爲孤兒。我試過subprocess模塊,但它的行爲方式也是一樣的。我不希望等待孩子完成的父進程。任何幫助,將不勝感激。謝謝。

+0

您正在使用哪種操作系統,如果是Linux,那麼當您啓動流程時,我有一個使用額外sh命令的解決方案。我不熟悉Windows腳本 – minhhn2910

+0

它是Linux。不是Windows –

回答

0

您需要從外部啓動一個獨立的子流程。這是做這件事:

  1. 把secondscriptfunction成一個可執行的Python文件

文件runscript.py

import sys 
from secondscript import secondscriptfunction 
if __name__=='__main__': 
     secondscriptfunction(sys.argv[1:]) #passing arguments to the func 
  • 使用subprocess.popen在您的腳本中:
  • 文件pollingjob.py

    import subprocess 
    import shlex 
    def createParallelBatches(a,b,c): 
        for i in [1,2,3]: 
         command = "python runscript.py %s %s %s "%(a,b,c) 
         cmd_args = shlex.split(command) 
         subprocess.Popen(cmd_args) 
        sys.exit() 
    
    相關問題