【发布时间】:2022-01-18 03:31:58
【问题描述】:
简而言之,脚本的作用以及我需要您的支持。算法运行,创建所有文件需要 10 多分钟。这样,队列会多次使用该消息。这将再次启动算法并创建 multilpe 文件,脚本最终花费的时间太长,有时需要 10-15 分钟,具体取决于文件中的数据量。您对如何优化脚本以使其运行得更快有任何想法:
async def main(msg: func.ServiceBusMessage):
if msg.content_type != "application/json":
logging.info("Incorrect content type")
return
msg_body = json.loads(msg.get_body().decode("utf-8"))
cc = msg_body.get("cc")
job_id = msg_body.get("job_id")
if cc is None or job_id is None:
# Missing parameters
logging.info("Required params are missing from message")
return
await update_status(
job_id=job_id, cc=cc, status="EXECUTING", algorithm=ALGORITHM_NAME
)
# Reading input files
azure_blob_client = AzureContainerClient(container=cc)
# Files can be read form API, when flag is_x set on True came from FE
raw_csv_file = StringIO(
await get_input_data(
az_cl=azure_blob_client, name_part="Data", data_type="raw"
)
)
ziajas_list = pd.read_csv(
raw_csv_file
)
ziaja_json = ziajas_list.to_json(orient="records", date_format="iso")
results = json.loads(ziaja_json)
ziajas = {}
for ziaja in results:
ziaja_name = ziaja["carr"]
if ziaja_name in ziajas:
ziajas[ziaja_name].append(ziaja)
else:
ziajas[ziaja_name] = [ziaja]
current_date_and_time = datetime.datetime.now()
current_date_and_time_string = str(current_date_and_time)
current_date_and_time_string = current_date_and_time_string.replace(' ', '_')
ziaja_check_list = []
ZiajaMapping = await get_parameters(parameters_name=ALGORITHM_NAME)
all_results = []
#Read parameter file
for ziaja_name, ziajas_list in ziajas.items():
try:
if ziaja_name not in ziaja_check_list:
user_list = get_ziaja_user_list(ziaja_name, ZiajaMapping)
timezone = get_cc_details_timezone(cc, ZiajaMapping)
cc_ID = get_cc_details_ccID(cc, ZiajaMapping)
text_to_include = get_cc_details_text_to_include(cc, ZiajaMapping)
admins = get_admins(cc, ZiajaMapping)
meta_data = {
"distribution": {
"method": "email",
"users": user_list,
"ccID": cc_ID,
"admin": admins
},
"subject": f"update for {timezone}",
"header": {
"include": True,
"apply_css": True
},
"handling": {
"message_style": "etxt",
"title": "Lot update",
"std_msg": "txt",
"personalized_msg": text_to_include
},
"footer": {
"include": True,
"footer_msg": "that algorithm"
},
"signature": {
"inclue": True,
"signature_text": "Team"
},
"attachments": {
"include": True,
"attachment_bytes": "base64string",
"attach_csv": True
},
"algorithm": {},
"cc": {}
}
all_results.append(store_results(
result=ziajas_list,
cc=cc,
job_id=ziaja_name + "_" + current_date_and_time_string,
algorithm_name=ALGORITHM_NAME,
meta=meta_data,
))
ziaja_check_list.append(ziaja_name)
except Exception as e:
logging.error(e)
return await asyncio.gather(*all_results)
【问题讨论】:
-
在我看来这个问题更适合在Code Review Forum 中提出。 Code Review 是一个针对同行程序员代码审查的问答网站。在发布您的问题之前,请阅读有关如何在本网站上正确提问的相关指南。
标签: python performance optimization python-asyncio