Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
周伟奇
/
bmw-ocr
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
46c738c0
authored
2025-02-13 14:34:47 +0800
by
冯轩
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
Merge branch 'hotfix/2025-02' into feature/uat-tmp
2 parents
1c3675c2
775d6ee5
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
137 additions
and
131 deletions
src/celery_compare/tasks.py
src/celery_compare/tasks.py
View file @
46c738c
...
...
@@ -3776,6 +3776,7 @@ def fsm_compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=
compare_log
.
info
(
'[fsm thread]'
)
#pool = ThreadPoolExecutor(max_workers=6, thread_name_prefix="fsm_thread_")
try
:
# 这个try不生效
pool
.
submit
(
fsm_compare_thread
,
application_id
,
application_entity
,
uniq_seq
,
ocr_res_id
,
is_ca
,
is_cms
)
except
Exception
as
e
:
compare_log
.
info
(
'[fsm thread fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
...
...
@@ -3783,37 +3784,40 @@ def fsm_compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=
def
fsm_compare_thread
(
application_id
,
application_entity
,
uniq_seq
,
ocr_res_id
,
is_ca
=
True
,
is_cms
=
False
):
compare_log
.
info
(
'{0} [receive fsm task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
try
:
compare_log
.
info
(
'{0} [receive fsm task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
'[is_cms={6}]'
.
format
(
log_base
,
application_entity
,
application_id
,
uniq_seq
,
ocr_res_id
,
is_ca
,
is_cms
))
# 查看此订单号下是否有未完成的文件,如果有,等1分钟
try
:
doc_wait_file_class
=
HILDoc
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCDoc
doc_wait_file_result
=
doc_wait_file_class
.
objects
.
filter
(
application_id
=
application_id
,
status
=
1
)
.
first
()
compare_log
.
info
(
'doc_wait_file_result:{0}'
.
format
(
doc_wait_file_result
))
compare_log
.
info
(
'{0} [comparison unfinished file check] [entity={1}] [id={2}] [doc_wait_file_result={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
))
except
Exception
as
e
:
doc_wait_file_result
=
None
compare_log
.
info
(
'[get doc_wait_file_result fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
if
doc_wait_file_result
is
not
None
:
# 实时查询延迟时间
try
:
delay_time_config
=
Configs
.
objects
.
filter
(
id
=
4
)
.
first
()
if
delay_time_config
is
not
None
and
delay_time_config
.
value
is
not
None
and
delay_time_config
.
value
.
isdigit
():
delay_time
=
delay_time_config
.
value
else
:
delay_time
=
0
except
Exception
as
e
:
delay_time
=
0
compare_log
.
info
(
'[get delay_time_config fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
compare_log
.
info
(
'delay_time:{0}'
.
format
(
delay_time
))
compare_log
.
info
(
'{0} [comparison unfinished file wait delay_time start] [entity={1}] [id={2}] [doc_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
.
id
))
try
:
time
.
sleep
(
int
(
delay_time
))
doc_wait_file_class
=
HILDoc
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCDoc
doc_wait_file_result
=
doc_wait_file_class
.
objects
.
filter
(
application_id
=
application_id
,
status
=
1
)
.
first
()
compare_log
.
info
(
'doc_wait_file_result:{0}'
.
format
(
doc_wait_file_result
))
compare_log
.
info
(
'{0} [comparison unfinished file check] [entity={1}] [id={2}] [doc_wait_file_result={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
))
except
Exception
as
e
:
compare_log
.
info
(
'[sleep error] [error={0}]'
.
format
(
traceback
.
format_exc
()))
compare_log
.
info
(
'{0} [comparison unfinished file wait delay_time end] [entity={1}] [id={2}] [doc_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
.
id
))
doc_wait_file_result
=
None
compare_log
.
info
(
'[get doc_wait_file_result fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
if
doc_wait_file_result
is
not
None
:
# 实时查询延迟时间
try
:
delay_time_config
=
Configs
.
objects
.
filter
(
id
=
4
)
.
first
()
if
delay_time_config
is
not
None
and
delay_time_config
.
value
is
not
None
and
delay_time_config
.
value
.
isdigit
():
delay_time
=
delay_time_config
.
value
else
:
delay_time
=
0
except
Exception
as
e
:
delay_time
=
0
compare_log
.
info
(
'[get delay_time_config fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
compare_log
.
info
(
'delay_time:{0}'
.
format
(
delay_time
))
compare_log
.
info
(
'{0} [comparison unfinished file wait delay_time start] [entity={1}] [id={2}] [doc_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
.
id
))
try
:
time
.
sleep
(
int
(
delay_time
))
except
Exception
as
e
:
compare_log
.
info
(
'[sleep error] [error={0}]'
.
format
(
traceback
.
format_exc
()))
compare_log
.
info
(
'{0} [comparison unfinished file wait delay_time end] [entity={1}] [id={2}] [doc_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
.
id
))
except
Exception
as
e
:
compare_log
.
info
(
'[fsm_compare_thread error] [error={0}]'
.
format
(
traceback
.
format_exc
()))
# 调用java fsm 比对流程接口(http)
...
...
@@ -3861,6 +3865,7 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True
compare_log
.
info
(
'[non fsm thread]'
)
#pool = ThreadPoolExecutor(max_workers=6, thread_name_prefix="non_fsm_thread_")
try
:
# 这个try不生效
pool
.
submit
(
compare_thread
,
application_id
,
application_entity
,
uniq_seq
,
ocr_res_id
,
is_ca
,
is_cms
)
except
Exception
as
e
:
compare_log
.
info
(
'[non fsm thread fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
...
...
@@ -3869,120 +3874,121 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True
def
compare_thread
(
application_id
,
application_entity
,
uniq_seq
,
ocr_res_id
,
is_ca
=
True
,
is_cms
=
False
):
# POS: application_id, application_entity, uniq_seq, None
# OCR: application_id, business_type(application_entity), None, ocr_res_id
compare_log
.
info
(
'{0} [receive task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
try
:
compare_log
.
info
(
'{0} [receive task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
'[is_cms={6}]'
.
format
(
log_base
,
application_entity
,
application_id
,
uniq_seq
,
ocr_res_id
,
is_ca
,
is_cms
))
# 根据application_id查找最新的比对信息,如果没有,结束
if
is_ca
:
comparison_class
=
HILComparisonInfo
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCComparisonInfo
else
:
if
application_entity
==
consts
.
HIL_PREFIX
:
comparison_class
=
HILSECMSInfo
if
is_cms
else
HILSEComparisonInfo
# 根据application_id查找最新的比对信息,如果没有,结束
if
is_ca
:
comparison_class
=
HILComparisonInfo
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCComparisonInfo
else
:
comparison_class
=
AFCSECMSInfo
if
is_cms
else
AFCSEComparisonInfo
last_obj
=
comparison_class
.
objects
.
filter
(
application_id
=
application_id
)
.
last
()
if
last_obj
is
None
:
compare_log
.
info
(
'{0} [comparison info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'
.
format
(
log_base
,
application_entity
,
application_id
,
uniq_seq
,
ocr_res_id
,
is_ca
,
is_cms
))
return
# 根据application_id查找OCR累计结果指定license字段,如果没有,结束
if
is_ca
:
result_class
=
HILOCRResult
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCOCRResult
ca_ocr_res_dict
=
dict
()
else
:
result_class
=
HILSEOCRResult
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCSEOCRResult
ca_result_class
=
HILOCRResult
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCOCRResult
# if ocr_res_id is None:
ca_ocr_res_dict
=
ca_result_class
.
objects
.
filter
(
application_id
=
application_id
)
.
values
(
*
consts
.
CA_ADD_COMPARE_FIELDS
)
.
first
()
# else:
# ca_ocr_res_dict = ca_result_class.objects.filter(id=ocr_res_id).values(
# *consts.CA_ADD_COMPARE_FIELDS).first()
if
ocr_res_id
is
None
:
ocr_res_dict
=
result_class
.
objects
.
filter
(
application_id
=
application_id
)
.
values
(
*
consts
.
COMPARE_FIELDS
)
.
first
()
else
:
ocr_res_dict
=
result_class
.
objects
.
filter
(
id
=
ocr_res_id
)
.
values
(
*
consts
.
COMPARE_FIELDS
)
.
first
()
if
ocr_res_dict
is
None
:
compare_log
.
info
(
'{0} [ocr info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'
.
format
(
log_base
,
application_entity
,
application_id
,
uniq_seq
,
ocr_res_id
,
is_ca
,
is_cms
))
return
# 查看此订单号下是否有未完成的文件,如果有,等?分钟
try
:
doc_wait_file_class
=
HILDoc
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCDoc
doc_wait_file_result
=
doc_wait_file_class
.
objects
.
filter
(
application_id
=
application_id
,
status
=
1
)
.
first
()
compare_log
.
info
(
'doc_wait_file_result:{0}'
.
format
(
doc_wait_file_result
))
compare_log
.
info
(
'{0} [comparison unfinished file check] [entity={1}] [id={2}] [doc_wait_file_result={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
))
except
Exception
as
e
:
doc_wait_file_result
=
None
compare_log
.
info
(
'[get doc_wait_file_result fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
if
doc_wait_file_result
is
not
None
:
# 实时查询延迟时间
try
:
delay_time_config
=
Configs
.
objects
.
filter
(
id
=
4
)
.
first
()
if
delay_time_config
is
not
None
and
delay_time_config
.
value
is
not
None
and
delay_time_config
.
value
.
isdigit
():
delay_time
=
delay_time_config
.
value
if
application_entity
==
consts
.
HIL_PREFIX
:
comparison_class
=
HILSECMSInfo
if
is_cms
else
HILSEComparisonInfo
else
:
delay_time
=
0
except
Exception
as
e
:
delay_time
=
0
compare_log
.
info
(
'[get delay_time_config fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
compare_log
.
info
(
'delay_time:{0}'
.
format
(
delay_time
))
compare_log
.
info
(
'{0} [comparison unfinished file wait delay_time start] [entity={1}] [id={2}] [doc_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
.
id
))
comparison_class
=
AFCSECMSInfo
if
is_cms
else
AFCSEComparisonInfo
last_obj
=
comparison_class
.
objects
.
filter
(
application_id
=
application_id
)
.
last
()
if
last_obj
is
None
:
compare_log
.
info
(
'{0} [comparison info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'
.
format
(
log_base
,
application_entity
,
application_id
,
uniq_seq
,
ocr_res_id
,
is_ca
,
is_cms
))
return
# 根据application_id查找OCR累计结果指定license字段,如果没有,结束
if
is_ca
:
result_class
=
HILOCRResult
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCOCRResult
ca_ocr_res_dict
=
dict
()
else
:
result_class
=
HILSEOCRResult
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCSEOCRResult
ca_result_class
=
HILOCRResult
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCOCRResult
# if ocr_res_id is None:
ca_ocr_res_dict
=
ca_result_class
.
objects
.
filter
(
application_id
=
application_id
)
.
values
(
*
consts
.
CA_ADD_COMPARE_FIELDS
)
.
first
()
# else:
# ca_ocr_res_dict = ca_result_class.objects.filter(id=ocr_res_id).values(
# *consts.CA_ADD_COMPARE_FIELDS).first()
if
ocr_res_id
is
None
:
ocr_res_dict
=
result_class
.
objects
.
filter
(
application_id
=
application_id
)
.
values
(
*
consts
.
COMPARE_FIELDS
)
.
first
()
else
:
ocr_res_dict
=
result_class
.
objects
.
filter
(
id
=
ocr_res_id
)
.
values
(
*
consts
.
COMPARE_FIELDS
)
.
first
()
if
ocr_res_dict
is
None
:
compare_log
.
info
(
'{0} [ocr info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'
.
format
(
log_base
,
application_entity
,
application_id
,
uniq_seq
,
ocr_res_id
,
is_ca
,
is_cms
))
return
# 查看此订单号下是否有未完成的文件,如果有,等?分钟
try
:
time
.
sleep
(
int
(
delay_time
))
doc_wait_file_class
=
HILDoc
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCDoc
doc_wait_file_result
=
doc_wait_file_class
.
objects
.
filter
(
application_id
=
application_id
,
status
=
1
)
.
first
()
compare_log
.
info
(
'doc_wait_file_result:{0}'
.
format
(
doc_wait_file_result
))
compare_log
.
info
(
'{0} [comparison unfinished file check] [entity={1}] [id={2}] [doc_wait_file_result={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
))
except
Exception
as
e
:
compare_log
.
info
(
'[sleep error] [error={0}]'
.
format
(
traceback
.
format_exc
()))
compare_log
.
info
(
'{0} [comparison unfinished file wait delay_time end] [entity={1}] [id={2}] [doc_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
.
id
))
doc_wait_file_result
=
None
compare_log
.
info
(
'[get doc_wait_file_result fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
if
doc_wait_file_result
is
not
None
:
# 实时查询延迟时间
try
:
delay_time_config
=
Configs
.
objects
.
filter
(
id
=
4
)
.
first
()
if
delay_time_config
is
not
None
and
delay_time_config
.
value
is
not
None
and
delay_time_config
.
value
.
isdigit
():
delay_time
=
delay_time_config
.
value
else
:
delay_time
=
0
except
Exception
as
e
:
delay_time
=
0
compare_log
.
info
(
'[get delay_time_config fail] [error={0}]'
.
format
(
traceback
.
format_exc
()))
compare_log
.
info
(
'delay_time:{0}'
.
format
(
delay_time
))
compare_log
.
info
(
'{0} [comparison unfinished file wait delay_time start] [entity={1}] [id={2}] [doc_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
.
id
))
try
:
time
.
sleep
(
int
(
delay_time
))
except
Exception
as
e
:
compare_log
.
info
(
'[sleep error] [error={0}]'
.
format
(
traceback
.
format_exc
()))
compare_log
.
info
(
'{0} [comparison unfinished file wait delay_time end] [entity={1}] [id={2}] [doc_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
doc_wait_file_result
.
id
))
if
is_ca
:
ca_compare
(
application_id
,
application_entity
,
ocr_res_id
,
last_obj
,
ocr_res_dict
)
else
:
id_res_list
=
[]
for
field_name
in
consts
.
CA_ADD_COMPARE_FIELDS
:
if
field_name
==
consts
.
IC_OCR_FIELD
:
id_res_list
.
append
(
ca_ocr_res_dict
.
get
(
field_name
)
if
isinstance
(
ca_ocr_res_dict
,
dict
)
else
None
)
id_res_list
.
append
(
ocr_res_dict
.
get
(
field_name
))
if
isinstance
(
ca_ocr_res_dict
,
dict
)
and
isinstance
(
ca_ocr_res_dict
.
get
(
field_name
),
str
):
tmp_ca_result
=
json
.
loads
(
ca_ocr_res_dict
.
get
(
field_name
))
if
isinstance
(
ocr_res_dict
.
get
(
field_name
),
str
):
tmp_se_result
=
json
.
loads
(
ocr_res_dict
.
get
(
field_name
))
tmp_ca_result
.
extend
(
tmp_se_result
)
ocr_res_dict
[
field_name
]
=
json
.
dumps
(
tmp_ca_result
)
# auto settlement
auto_class
=
HILAutoSettlement
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCAutoSettlement
auto_obj
=
auto_class
.
objects
.
filter
(
application_id
=
application_id
,
on_off
=
True
)
.
first
()
bank_class
=
HILbankVerification
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCbankVerification
ignore_bank
=
bank_class
.
objects
.
filter
(
application_id
=
application_id
,
on_off
=
True
)
.
exists
()
data_source
=
''
if
application_entity
==
consts
.
AFC_PREFIX
:
doc_obj
=
AFCDoc
.
objects
.
filter
(
application_id
=
application_id
,
document_name__icontains
=
'电子签署-车辆抵押贷款合同'
)
.
last
()
if
doc_obj
is
not
None
:
data_source
=
doc_obj
.
data_source
compare_log
.
info
(
'{0} [get data_source] [id={1}] [data_source={2}]]'
.
format
(
log_base
,
application_id
,
data_source
))
if
auto_obj
is
not
None
:
auto_result
=
se_compare_auto
(
application_id
,
application_entity
,
ocr_res_id
,
last_obj
,
ocr_res_dict
,
auto_obj
,
ignore_bank
,
id_res_list
,
data_source
)
if
is_ca
:
ca_compare
(
application_id
,
application_entity
,
ocr_res_id
,
last_obj
,
ocr_res_dict
)
else
:
auto_result
=
None
id_res_list
=
[]
for
field_name
in
consts
.
CA_ADD_COMPARE_FIELDS
:
if
field_name
==
consts
.
IC_OCR_FIELD
:
id_res_list
.
append
(
ca_ocr_res_dict
.
get
(
field_name
)
if
isinstance
(
ca_ocr_res_dict
,
dict
)
else
None
)
id_res_list
.
append
(
ocr_res_dict
.
get
(
field_name
))
if
isinstance
(
ca_ocr_res_dict
,
dict
)
and
isinstance
(
ca_ocr_res_dict
.
get
(
field_name
),
str
):
tmp_ca_result
=
json
.
loads
(
ca_ocr_res_dict
.
get
(
field_name
))
if
isinstance
(
ocr_res_dict
.
get
(
field_name
),
str
):
tmp_se_result
=
json
.
loads
(
ocr_res_dict
.
get
(
field_name
))
tmp_ca_result
.
extend
(
tmp_se_result
)
ocr_res_dict
[
field_name
]
=
json
.
dumps
(
tmp_ca_result
)
# auto settlement
auto_class
=
HILAutoSettlement
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCAutoSettlement
auto_obj
=
auto_class
.
objects
.
filter
(
application_id
=
application_id
,
on_off
=
True
)
.
first
()
bank_class
=
HILbankVerification
if
application_entity
==
consts
.
HIL_PREFIX
else
AFCbankVerification
ignore_bank
=
bank_class
.
objects
.
filter
(
application_id
=
application_id
,
on_off
=
True
)
.
exists
()
data_source
=
''
if
application_entity
==
consts
.
AFC_PREFIX
:
doc_obj
=
AFCDoc
.
objects
.
filter
(
application_id
=
application_id
,
document_name__icontains
=
'电子签署-车辆抵押贷款合同'
)
.
last
()
if
doc_obj
is
not
None
:
data_source
=
doc_obj
.
data_source
compare_log
.
info
(
'{0} [get data_source] [id={1}] [data_source={2}]]'
.
format
(
log_base
,
application_id
,
data_source
))
if
auto_obj
is
not
None
:
auto_result
=
se_compare_auto
(
application_id
,
application_entity
,
ocr_res_id
,
last_obj
,
ocr_res_dict
,
auto_obj
,
ignore_bank
,
id_res_list
,
data_source
)
else
:
auto_result
=
None
full_result
=
se_compare
(
application_id
,
application_entity
,
ocr_res_id
,
last_obj
,
ocr_res_dict
,
is_cms
,
auto_result
,
ignore_bank
,
id_res_list
,
data_source
)
if
auto_obj
is
not
None
:
try
:
auto_obj
.
ocr_whole_result_pass
=
full_result
auto_obj
.
save
()
compare_log
.
info
(
'{0} [Auto SE] [result save success] [entity={1}] [id={2}] [ocr_res_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
ocr_res_id
))
except
Exception
as
e
:
compare_log
.
error
(
'{0} [Auto SE] [result save error] [entity={1}] [id={2}] [ocr_res_id={3}] '
'[error={4}]'
.
format
(
log_base
,
application_entity
,
application_id
,
ocr_res_id
,
traceback
.
format_exc
()))
full_result
=
se_compare
(
application_id
,
application_entity
,
ocr_res_id
,
last_obj
,
ocr_res_dict
,
is_cms
,
auto_result
,
ignore_bank
,
id_res_list
,
data_source
)
if
auto_obj
is
not
None
:
try
:
auto_obj
.
ocr_whole_result_pass
=
full_result
auto_obj
.
save
()
compare_log
.
info
(
'{0} [Auto SE] [result save success] [entity={1}] [id={2}] [ocr_res_id={3}]'
.
format
(
log_base
,
application_entity
,
application_id
,
ocr_res_id
))
except
Exception
as
e
:
compare_log
.
error
(
'{0} [Auto SE] [result save error] [entity={1}] [id={2}] [ocr_res_id={3}] '
'[error={4}]'
.
format
(
log_base
,
application_entity
,
application_id
,
ocr_res_id
,
traceback
.
format_exc
()))
except
Exception
as
e
:
compare_log
.
info
(
'[compare_thread error] [error={0}]'
.
format
(
traceback
.
format_exc
()))
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment