芹菜:未定义全局名称“collections”

2024-06-07 14:51:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个烧瓶应用程序,以芹菜和红葡萄酒作为经纪人,配置如下:

import flask
from werkzeug import secure_filename
from werkzeug.contrib.fixers import ProxyFix
app = flask.Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
app.url_map.strict_slashes = False
app.jinja_env.cache = None

from celery import Celery
def make_celery(app):
    celery = Celery(__name__, broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
    TaskBase = celery.Task
    class ContextTask(TaskBase):
        abstract = True
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)
    celery.Task = ContextTask
    return celery
app.config.update(CELERY_BROKER_URL='redis://:{}@127.0.0.1:6379/15'.format(os.environ['REDIS_PASSWD']), CELERY_RESULT_BACKEND='redis://:{}@127.0.0.1:6379/15'.format(os.environ['REDIS_PASSWD']), CELERY_IMPORTS=("aortabot"), CELERY_TASK_RESULT_EXPIRES = 300, CELERY_REDIRECT_STDOUTS_LEVEL="DEBUG")
celery = make_celery(app)

下面是redis db 15的内容:

^{pr2}$

但是关于任务(条目2和条目5),芹菜日志说:

[2015-06-28 21:54:45,046: DEBUG/Worker-4] global name 'collections' is not defined
[2015-06-28 21:54:45,048: INFO/MainProcess] Task implement_aortabot[e57cef5c-4ac2-4565-b350-5fb0fc109d13] succeeded in 1.018413604s: None

未定义全局名称“collections”

在我的应用程序中,只有1个@芹菜。任务即使我替换了芹菜。任务使用“pass”,我仍然得到相同的日志消息。在

你能帮我看看可能出了什么问题吗?在

编辑:有1个文件。““收藏”如下:

$ cat aortabot.py | egrep collections
import collections
    netpart = collections.defaultdict(dict)
                info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            netpart[route_instance] = collections.defaultdict(dict)
                    info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
                info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            netpart[route_instance] = collections.defaultdict(dict)
                    info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
                info = collections.defaultdict(dict)
                info['bgp-rib'] = collections.defaultdict(dict)
                    info['bgp-rib'][name] = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
            info['cos'] = collections.defaultdict(dict)
            info['ethernet-mac-statistics'] = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
            tip = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
            tip = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            'pfe-statistics']['pfe-local-traffic-statistics'] = collections.defaultdict(dict)
            'pfe-statistics']['pfe-hardware-discard-statistics'] = collections.defaultdict(dict)
            'pfe-statistics']['pfe-chip-statistics'] = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
        netpart['krt-queue'] = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
            info = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
    netpart = collections.defaultdict(dict)
    netstat = collections.defaultdict(dict)
                    leveled = collections.OrderedDict(sorted(leveled.items()))
                        leveled = collections.OrderedDict(
                registrar = collections.defaultdict(dict)

注意:代码以前是工作的,在用redisdb0做实验后,然后将它改为db15,问题就显现出来了

编辑:这是唯一定义的芹菜任务,正如所提到的它不是关于任务的,好像我用pass替换函数体我还是遇到了这个问题

@celery.task(name="implement_aortabot", bind=True)
def implement_aortabot(self, diff_):
    with app.test_request_context():
        try:
            uuid_i = uuid.uuid4().hex
            timestamp = datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S")
            diff_['netelement']['pyez'] = Device(host=diff_['netelement']['ip'], user=net_['app']['user'], passwd=net_['app']['passwd'], port=22, gather_facts=False)
            diff_['netelement']['pyez'].open()
            jsnap_like.formulate_netconf_data(diff_['netelement']['pyez'], uuid_i, diff_['netelement']['host'])
            diff_['netelement']['pyez'].close()
            lookup = {
                'maintenance': diff_['control']['maintenance'],
                'username': diff_['username'],
                'timestamp': timestamp,
                'message': diff_['netelement']['host'] + " * " + diff_['control']['maintenance'] + " * " + diff_['username'] + " * " + timestamp,
            }
            if not os.path.exists(net_['registry'] + diff_['netelement']['host'] + ".cfg"):
                registrar = collections.defaultdict(dict)
                registrar['aortabot'][diff_['netelement']['host']] = {}
                registrar['aortabot'][diff_['netelement']['host']][uuid_i] = lookup
                write_file(net_['registry'] + diff_['netelement']['host'] + ".cfg", json.dumps(registrar))
            else:
                registrar = read_file(net_['registry'] + diff_['netelement']['host'] + ".cfg")
                registrar = json.loads(registrar)
                registrar['aortabot'][diff_['netelement']['host']][uuid_i] = lookup
                write_file(net_['registry'] + diff_['netelement']['host'] + ".cfg", json.dumps(registrar))
            action = {
                'status': True,
                'netelement': diff_['netelement']['host'],
                'ip': diff_['netelement']['ip'],
                'maintenance': diff_['control']['maintenance'],
                'timestamp': timestamp,
                'username': diff_['username'],
                'admin_status': False,
                'admin_timestamp': None,
                'admin_username': None,
                #'id': list(irepo.iter_commits())[0].hexsha,
                'id': uuid_i,
            }
            if not search_pickle_object("tasks.json", action):
                insert_pickle_object("tasks.json", action)
            insert_pickle_object("activities.json", action)
        except Exception, e:
            print str(e)

Tags: infoapphostdiffcollectionsdicttimestampcelery

热门问题