相关疑难解决方法(0)

分布式任务队列(例如Celery)与crontab脚本

我无法理解"分布式任务队列"的用途.例如,python的芹菜库.

我知道在celery,python框架中,你可以设置定时窗口来执行函数.但是,这也可以在针对python脚本的linux crontab中轻松完成.

据我所知,并且从我自己的django-celery webapps中显示,芹菜消耗的RAM内存比设置原始crontab要多得多.一个相对较小的应用程序几百MB差异.

有人可以帮助我这个区别吗?也许对任务队列/ crontabs如何工作的高级解释也很好.

谢谢.

python django celery

87
推荐指数
1
解决办法
1万
查看次数

未调用 apply_async 回调函数

我是 python 的新手,我有一个函数可以计算我的数据的特征,然后返回一个应该处理并写入文件的列表。,我正在使用 Pool 进行计算,然后使用回调函数来写入文件,但是没有调用回调函数,我已经在其中放入了一些打印语句,但它肯定没有被调用。我的代码是这样的:

def write_arrow_format(results):
print("writer called")
results[1].to_csv("../data/model_data/feature-"+results[2],sep='\t',encoding='utf-8')
with open('../data/model_data/arow-'+results[2],'w') as f:
     for dic in results[0]:
         feature_list=[]
         print(dic)
         beginLine=True
         for key,value in dic.items():
              if(beginLine):
                feature_list.append(str(value))
                beginLine=False
              else:
                feature_list.append(str(key)+":"+str(value))
         feature_line=" ".join(feature_list)
         f.write(feature_line+"\n")


def generate_features(users,impressions,interactions,items,filename):
    #some processing 
    return [result1,result2,filename]





if __name__=="__main__":
   pool=mp.Pool(mp.cpu_count()-1)

   for i in range(interval):
       if i==interval:
          pool.apply_async(generate_features,(users[begin:],impressions,interactions,items,str(i)),callback=write_arrow_format)
       else:
           pool.apply_async(generate_features,(users[begin:begin+interval],impressions,interactions,items,str(i)),callback=write_arrow_format)
           begin=begin+interval
   pool.close()
   pool.join()
Run Code Online (Sandbox Code Playgroud)

python concurrency pool python-3.x

2
推荐指数
1
解决办法
4111
查看次数

标签 统计

python ×2

celery ×1

concurrency ×1

django ×1

pool ×1

python-3.x ×1