gpt4 book ai didi

celery - 如何在内存中加载对象并在 Celery worker 的不同执行之间共享?

转载 作者:行者123 更新时间:2023-12-01 15:20:37 31 4
gpt4 key购买 nike

我在 3 集群机器上设置了 celery + rabbitmq。我还创建了一个任务,它根据文件中的数据生成一个正则表达式,并使用该信息来解析文本。但是,我希望读取文件的过程只在每个工作人员生成时完成一次,而不是在每次执行 as 任务时完成。

from celery import Celery

celery = Celery('tasks', broker='amqp://localhost//')
import re

@celery.task
def add(x, y):
return x + y


def get_regular_expression():
with open("text") as fp:
data = fp.readlines()
str_re = "|".join([x.split()[2] for x in data ])
return str_re



@celery.task
def analyse_json(tw):
str_re = get_regular_expression()
re.match(str_re,tw.text)

在上面的代码中,我想打开文件并将每个工作人员的输出读入字符串一次,然后任务 analyse_json 应该只使用该字符串。

任何帮助将不胜感激,

谢谢,阿米特

最佳答案

在模块级别调用 get_regular_expression:

str_re = get_regular_expression()

@celery.task
def analyse_json(tw):
re.match(str_re, tw.text)

它只会在第一次导入模块时调用一次。

此外,如果您必须一次只运行一个 worker 实例(例如 CUDA),则必须使用 -P solo 选项:

celery worker --pool solo

适用于 celery 4.4.2。

关于celery - 如何在内存中加载对象并在 Celery worker 的不同执行之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20819894/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com