我在3台机器上安装了celery + rabbitmq。我还创建了一个任务,它根据文件中的数据生成正则表达式,并使用该信息来解析文本。但是,我希望读取文件的过程仅在每个worker生成时执行一次,而不是在每次执行任务时完成。
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)
在上面的代码中,我想打开文件并将输出只读取到每个worker的字符串一次,然后任务analyse_json应该只使用字符串。
任何帮助将不胜感激,
感谢, 阿米特
答案 0 :(得分:1)
在模块级别调用get_regular_expression
:
str_re = get_regular_expression()
@celery.task
def analyse_json(tw):
re.match(str_re, tw.text)
首次导入模块时,只会调用一次。