繁体   English   中英

调用 flow.register() 时,Prefect 没有注册流。 它触发不能腌制错误

[英]Prefect is not registering flow when call flow.register() . It triggers can´t pickle error

使用 Prefect 向我的后端服务器注册工作流会返回此错误:

Traceback(最近一次通话最后):文件“/home/usr/Documents/Test_Automation/Automation/qa-automation/date_validator_Prefect/date_validator.py”,第 114 行,在 flow.register(project_name="QA-Test") 文件中“ /home/usr/.local/lib/python3.9/site-packages/prefect/core/flow.py”,第 1726 行,在 registerregister_flow = client.register(文件“/home/usr/.local/lib/ python3.9/site-packages/prefect/client/client.py",第 848 行,在寄存器中 serialized_flow = flow.serialize(build=build) # type: Any File "/home/usr/.local/lib/python3. 9/site-packages/prefect/core/flow.py”,第 1507 行,在序列化 self.storage.add_flow(self) 文件“/home/usr/.local/lib/python3.9/site-packages/prefect/ storage/local.py”,第 143 行,在 add_flow f.write(flow_to_bytes_pickle(flow)) 文件“/home/usr/.local/lib/python3.9/site-packages/prefect/utilities/storage.py”中,第 178 行,在 flow_to_bytes_pickle cloudpickle.dumps(flow, protocol=4), newline=False File "/home/usr/.local/lib/python3.9/site-packages/cloudpickle/cloudpickle_fast.py", 第 73 行,在转储中 cp.dump(obj) 文件“/home/usr/.local/lib/python3.9/site-packages/cloudpickle/cloudpickle_fast.py”,第 633 行,在转储中返回 Pickler.dump(self, obj) TypeError: cannot pickle 'weakref' object

只有当我尝试flow.register(project="QA-test")时才会发生这种情况。 如果我只添加flow.run()它工作正常。

这是代码的开头:

@task(name="T3")
def feed_validator():
    jsonpath = ''
    results = []
    urlsData = load_data('urls2.json')
    for feed in urlsData:
        for country in feed["countries"]:
            feedUrl = feed['url']
            if feed['type'] == 'Availability':
                feedUrl = feedUrl.replace('/us/', "/" + country.lower() + "/")
            feedData = getFeed(feedUrl)
            feedDateInfo = isFeedUpdated(feedData)
            if feed['network'] == 'network-samp(gate)':
                feed['network'] = 'network-samp'
            elif feed['network'] == 'network-samp(samp)':
                feed['network'] = 'network-samp2'
                country = ''
            elif feed['network'] == 'network-samp3(samp3)':
                feed['network'] = 'network-samp3'
                country = ''
            elif feed['type'] == 'Catalog':
                country = ''
            results.append((feed['platform'], feed['type'], feed['network'], country, feedDateInfo[1]))
    orderedResults = multisort(list(results), ((4, False), (1, False), (2, False), (3, False)))
    report = email_sender.createResultsEmail(orderedResults)
    email_sender.sendEmail(report.as_string())

with Flow("test", storage=Local()) as flow:
    feed_validator()

flow.register(project_name="QA-Test")
flow.run()

使用本地存储时,Prefect 默认使用腌制流。 您可以切换到使用脚本存储,如本文档页面所述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM