Python 芹菜实际上是如何执行任务的?

Python 芹菜实际上是如何执行任务的?,python,python-2.7,celery,Python,Python 2.7,Celery,我在目录中有一个文本文件\u files,其中包含以下几行 aaaaabbbb cccc--ddddeee ffff gggjjjkkk eers--kklliii kkll ... aaaaabbbbcccc ddddeeeffff gggjjjkkkeers kklliiikkll ... 我编写了一个芹菜脚本,可以处理文本文件中的每一行 from celery import Celery import os app = Celery('tasks', broker='amqp://

我在目录
中有一个文本文件\u files
,其中包含以下几行

aaaaabbbb cccc--ddddeee ffff
gggjjjkkk eers--kklliii kkll
...
aaaaabbbbcccc ddddeeeffff
gggjjjkkkeers kklliiikkll
...
我编写了一个芹菜脚本,可以处理文本文件中的每一行

from celery import Celery

import os

app = Celery('tasks', broker='amqp://guest@localhost//')

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] celery@Ling-Air 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'),(.....,...)
我通过调用
printstring1,string2
检查了我的脚本,它确实按照我预期的方式打印了结果

aaaaabbbb cccc--ddddeee ffff
gggjjjkkk eers--kklliii kkll
...
aaaaabbbbcccc ddddeeeffff
gggjjjkkkeers kklliiikkll
...
我的问题是芹菜是如何执行任务的?当我执行任务
do_task_txt
时,它只显示已操作文件中的一行。如何显示所有已被操纵的行,而不是仅显示一行

谢谢你的建议

first
f.close()
在if语句中永远不会被调用,因此文件句柄将保留

其次,任务返回一个元组,芹菜(或代理)无法正确解析该元组

返回一个合并字符串:

return ", ".join(string1, string2)

当您
返回时
,函数执行完成,它不会处理左行和其他文件。您应该保存结果并最终返回

@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