2015-10-05 87 views
1

我有Python Celery作爲守護進程運行,Celerybeat在亞馬遜Linux框上拾取任務。當我運行我的測試任務時,它沒有發生任何事情就完成了。在運行Python Celery作爲守護進程時無法執行Ruby腳本

@app.task 
def test(): 
    print("Testing 123") 
    return 0 

然而,當我嘗試使用Python的subprocess模塊,它輪詢的時間屈指可數,以火了一個Ruby腳本,然後用1返回代碼退出。

@app.task 
def run_cli(): 
    try: 
     process = subprocess.Popen([filepath, "run"], stdout=subprocess.PIPE) 

     while not process.poll(): 
      data = process.stdout.readline() 
      if data: 
       sys.stdout.write("Polling: " + data.decode("utf-8")) 
      else: 
       sys.stdout.write("Polling: No Data.") 

     return process.wait() 
    except Exception as e: 
     print(e) 

我已經證實,當使用tasks.run_cli.apply()在Python殼芹菜工人執行Ruby腳本順利運行。那麼,芹菜守護進程爲什麼不執行這個任務?

預警:我對Python非常陌生&芹菜和我的Linux技能很差,所以我很抱歉,如果它是明顯的。任何幫助深表感謝。

回答

0

對於輪詢結束Ruby腳本必須發送一個非零信號返回到Python腳本,否則該過程完成,Python繼續輪詢而不接收數據。由於對process.stdout.readline()的錯誤響應表明(我懷疑)腳本的處理已完成,所以也可以在else條件中跳出循環。

相關問題