[英]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.