从芹菜运行命令

时间:2013-12-19 15:59:44

标签: celery

首先,我有一个使用芹菜运行的模块。

其次我有另一个模块,我跑来把任务推给芹菜工人。它导入第一个模块并将其称为异步。

现在第一个模块加载一些只需要加载一次的大文件。我希望在芹菜开始时加载,但是当我运行第二个模块将任务推到芹菜上时,我不希望再次导入这些文件。

我是否可以使用celery调用一个函数,以便在初始化worker时首次加载,然后在运行第二个模块时再次调用此函数,而第二个模块只是将任务推送给worker?

干杯

2 个答案:

答案 0 :(得分:1)

实现这一目标的最简单方法是将模块传递给您的芹菜工人,而不是让他们自己导入它。

例如,像这样

导入big_module

tasks = [foo.s(big_module),foo.s(big_module)...]

现在,在foo内部,而不是导入模块,只需像访问任何其他对象一样访问它。

答案 1 :(得分:1)

每个worker将任务实例化为单例,因此您可以在任务对象中缓存所需的任何内容。

听起来你想在不同的任务之间分享。在这种情况下,您可以创建自己的单例。每个工人将加载一次。如果你想让多个工作人员共享它,你需要一个缓存(memcache,redis,django db,一个优化文件,?)。