2017-03-22 158 views
0

我有目錄裏面the_files一個文本文件,其中包含幾個行這樣芹菜如何實際執行任務?

aaaaabbbb cccc--ddddeee ffff 
gggjjjkkk eers--kklliii kkll 
... 

我寫的操作在文本文件中的每一行芹菜腳本。

from celery import Celery 

import os 

app = Celery('tasks', broker='amqp://[email protected]//') 

path = "the_files/" 

@app.task 
def do_task_txt(): 
    dir_path = os.listdir(path) 
    for file in dir_path: 
     if file.endswith(".txt"): 
      f = open(path + file, "r") 
      for line in f: 
       string1 = line[0:14].replace(" ", "") 
       string2 = line[16:].replace(" ", "") 

      #print string1, string2 
      return string1, string2 
     f.close() 

當我運行此腳本芹菜它提供了以下結果

[tasks] 
    . tasks.do_task_txt 

[2017-03-22 13:51:00,713: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// 
[2017-03-22 13:51:00,791: INFO/MainProcess] mingle: searching for neighbors 
[2017-03-22 13:51:01,966: INFO/MainProcess] mingle: all alone 
[2017-03-22 13:51:02,055: INFO/MainProcess] [email protected] ready. 
[2017-03-22 13:51:25,624: INFO/MainProcess] Received task: tasks.do_task_txt[77166520-21a8-466e-9522-cb2b1821a185] 
[2017-03-22 13:51:26,152: INFO/PoolWorker-2] Task tasks.do_task_txt[77166520-21a8-466e-9522-cb2b1821a185] succeeded in 0.00866508999752s: ('aaaaabbbbcccc', 'ddddeeeffff') 

只顯示第一行。

我希望得到它,以示對每一行或許這樣的可能?

[2017-03-22 13:51:26,152: INFO/PoolWorker-2] Task tasks.do_task_txt[77166520-21a8-466e-9522-cb2b1821a185] succeeded in 0.00866508999752s: ('aaaaabbbbcccc', 'ddddeeeffff'),('gggjjjkkkeers', 'kklliiikkll'),(.....,...) 

我通過調用print string1, string2檢查了我的腳本,它沒有打印結果正如我預料這樣

aaaaabbbbcccc ddddeeeffff 
gggjjjkkkeers kklliiikkll 
... 

我的問題是如何芹菜執行任務?當我執行任務do_task_txt時,它只顯示已被操作的文件中的一行。我如何顯示所有被操作的行而不是一行?

謝謝您的建議。

回答

0

第一f.close()不會被調用時,if語句裏面,所以文件句柄將保持不變。

其次你的任務返回其芹菜(或經紀人)不正確地分析一個元組。

返回合併字符串,而不是:

return ", ".join(string1, string2) 
0

當你return,函數執行完畢,也不會留下加工線和其他文件。你應該保存結果並最終返回。

@app.task 
def do_task_txt(): 
    dir_path = os.listdir(path) 
    result = [] 
    for file in dir_path: 
     if file.endswith(".txt"): 
      f = open(path + file, "r") 
      for line in f: 
       string1 = line[0:14].replace(" ", "") 
       string2 = line[16:].replace(" ", "") 

      #print string1, string2 
      result += [string1, string2] 
     f.close() 

    return result