Python 在执行芹菜任务后保留初始化的变量
我有一些代码如下:Python 在执行芹菜任务后保留初始化的变量,python,celery,Python,Celery,我有一些代码如下: model = None @app.task() def compute_something(): global model if model is None: # Initialize model # Use model to perform computation 因此,我希望设置代码(冗长的模型初始化)在必要时只执行一次,对同一任务的进一步调用可以是重用这些初始化的变量 我知道这部分打破了任务严格意义上的原子概念。但在默认情况
model = None
@app.task()
def compute_something():
global model
if model is None:
# Initialize model
# Use model to perform computation
因此,我希望设置代码(冗长的模型初始化)在必要时只执行一次,对同一任务的进一步调用可以是重用这些初始化的变量
我知道这部分打破了任务严格意义上的原子概念。但在默认情况下,这似乎不起作用,因为(我假设)多处理为每个任务分叉单独的进程,从而丢失了初始化
有没有办法做到这一点
相关问题:
从另一个角度来看,工作人员是否有办法查看任务队列并将任务分组,以便更有效地一起执行这些任务
假设一个工作者同时处理一组任务比一个接一个地处理任务(例如GPU作业,或者在这里将一个大参数文件加载到内存中)要高效得多
我想知道是否有一种方法可以让工作人员在任务队列中收集同一任务的多个实例,并以批处理方式而不是逐个处理它们。您可以在模块级别初始化模型:
model = initialise_model()
@app.task()
def compute_something():
# Use model to perform computation
但是,这假设模型初始化不依赖于传递给任务的任何内容,并且任务不会以任何方式修改模型
第二个问题没有多大意义。你能提供一些背景吗?你所说的“小组任务”到底是什么意思?是否希望在特定主机上运行某些任务以优化对共享资源的访问?如果是这样的话,那么请阅读有关路线的芹菜文档 是的,我可能会这样做,但是2/3的时间用于模型加载,我不知道是否需要提前调用此任务,所以这将是对RAM的浪费。对于问题的第二部分,我编辑了我的问题。我不确定我如何理解一名员工应该如何“以批处理方式”处理一组任务。工人需要了解请求数据才能聚合它,对吗?这样的修改将需要您修改芹菜工人代码…是的,我担心,但我想知道是否有办法。例如,我知道工作人员可以提前保留任务,因此将相同的任务保留实例分组在一起将是一个优势。