我在目录the_files
中有一个文本文件,其中包含多行这样的
aaaaabbbb cccc--ddddeee ffff
gggjjjkkk eers--kklliii kkll
...
我写了一个芹菜脚本来操纵文本文件中的每一行。
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'),(.....,...)
我通过调用print string1, string2
检查了我的脚本,它确实按照我的预期打印了结果
aaaaabbbbcccc ddddeeeffff
gggjjjkkkeers kklliiikkll
...
我的问题是Celery如何执行任务?当我执行任务do_task_txt
时,它只显示已被操作的文件中的一行。如何显示已操作的所有行而不是仅显示一行?
感谢您的建议。
答案 0 :(得分:0)
在if语句内部永远不会调用第一个return ", ".join(string1, string2)
,因此文件句柄将保留。
其次,您的任务返回一个芹菜(或代理)无法正确解析的元组。
返回合并的字符串:
$.ajax({
url: 'presign_url.php',
type: 'post',
dataType: 'json',
success: function (data) {
send_img(png,image_size,data); /* append this data with your post data. I pass the data to my image uploading function.data contains presigned data(image name,file size,format and other amazon credentials )*/
},
data: {}
});
答案 1 :(得分: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