[Pydantic schemas] Poor performance of schemas import
FYI: @bwrona @kmochocki @jziebinski
From the profiling log below, we can observer that schemas mainly spend time in
import time: 3668053 | 3773275 | schemas.__private.operations
and since all the child modules does not count up to this large value, it means the problem probably is inside schemas/__private/operations/__init__.py
file.
which is confirmed by:
>> time python schemas/__private/operations/__init__.py
7,93s user 0,09s system 94% cpu 8,493 total
part related to schemas, problem was initially observed in clive, output of time python -X importtime clive/main.py --help
:
import time: self [us] | cumulative | imported package
import time: 146 | 146 | schemas
import time: 135 | 281 | schemas.__private
import time: 638 | 638 | pydantic.generics
import time: 111 | 111 | schemas.__private.hive_constants
import time: 583 | 583 | schemas.__private.preconfigured_base_model
import time: 7834 | 9444 | schemas.__private.hive_fields_basic_schemas
import time: 8598 | 8598 | schemas.__private.hive_fields_custom_schemas
import time: 1433 | 1433 | schemas.__private.operations.account_create_operation
import time: 1084 | 1084 | schemas.__private.operations.account_update2_operation
import time: 1077 | 1077 | schemas.__private.operations.account_update_operation
import time: 644 | 644 | schemas.__private.operations.account_witness_proxy_operation
import time: 686 | 686 | schemas.__private.operations.account_witness_vote_operation
import time: 570 | 570 | schemas.__private.operations.cancel_transfer_from_savings_operation
import time: 589 | 589 | schemas.__private.operations.change_recovery_account_operation
import time: 1463 | 1463 | schemas.__private.operations.claim_account_operation
import time: 1328 | 1328 | schemas.__private.operations.claim_reward_balance_operation
import time: 853 | 853 | schemas.__private.operations.collateralized_convert_operation
import time: 1115 | 1115 | schemas.__private.operations.comment_operation
import time: 1251 | 1251 | schemas.__private.operations.comment_options_operation
import time: 866 | 866 | schemas.__private.operations.convert_operation
import time: 1014 | 1014 | schemas.__private.operations.create_claimed_account_operation
import time: 1162 | 1162 | schemas.__private.operations.create_proposal_operation
import time: 1164 | 1164 | schemas.__private.operations.custom_binary_operation
import time: 967 | 967 | schemas.__private.operations.custom_json_operation
import time: 659 | 659 | schemas.__private.operations.custom_operation
import time: 497 | 497 | schemas.__private.operations.decline_voting_rights_operation
import time: 879 | 879 | schemas.__private.operations.delegate_vesting_shares_operation
import time: 503 | 503 | schemas.__private.operations.delete_comment_operation
import time: 1499 | 1499 | schemas.__private.operations.escrow_approve_operation
import time: 1017 | 1017 | schemas.__private.operations.escrow_dispute_operation
import time: 1822 | 1822 | schemas.__private.operations.escrow_release_operation
import time: 2353 | 2353 | schemas.__private.operations.escrow_transfer_operation
import time: 2229 | 2229 | schemas.__private.operations.feed_publish_operation
import time: 639 | 639 | schemas.__private.operations.limit_order_cancel_operation
import time: 1363 | 1363 | schemas.__private.operations.limit_order_create2_operation
import time: 1810 | 1810 | schemas.__private.operations.limit_order_create_operation
import time: 2424 | 2424 | schemas.__private.operations.pow_operation
import time: 580 | 580 | schemas.__private.operations.recover_account_operation
import time: 1479 | 1479 | schemas.__private.operations.recurrent_transfer_operation
import time: 567 | 567 | schemas.__private.operations.remove_proposal_operation
import time: 650 | 650 | schemas.__private.operations.request_account_recovery_operation
import time: 901 | 901 | schemas.__private.operations.reset_account_operation
import time: 812 | 812 | schemas.__private.operations.set_reset_account_operation
import time: 767 | 767 | schemas.__private.operations.set_withdraw_vesting_route_operation
import time: 1214 | 1214 | schemas.__private.operations.transfer_from_savings_operation
import time: 1382 | 1382 | schemas.__private.operations.transfer_operation
import time: 1438 | 1438 | schemas.__private.operations.transfer_to_savings_operation
import time: 1054 | 1054 | schemas.__private.operations.transfer_to_vesting_operation
import time: 1080 | 1080 | schemas.__private.operations.update_proposal_operation
import time: 633 | 633 | schemas.__private.operations.update_proposal_votes_operation
import time: 1233 | 1233 | schemas.__private.operations.virtual.account_created_operation
import time: 1632 | 1632 | schemas.__private.operations.virtual.author_reward_operation
import time: 744 | 744 | schemas.__private.operations.virtual.changed_recovery_account_operation
import time: 1197 | 1197 | schemas.__private.operations.virtual.clear_null_account_balance_operation
import time: 860 | 860 | schemas.__private.operations.virtual.collateralized_convert_immediate_conversion_operation
import time: 1531 | 1531 | schemas.__private.operations.virtual.comment_benefactor_reward_operation
import time: 531 | 531 | schemas.__private.operations.virtual.comment_payout_update_operation
import time: 2356 | 2356 | schemas.__private.operations.virtual.comment_reward_operation
import time: 1108 | 1108 | schemas.__private.operations.virtual.consolidate_treasury_balance_operation
import time: 1075 | 1075 | schemas.__private.operations.virtual.curation_reward_operation
import time: 448 | 448 | schemas.__private.operations.virtual.declined_voting_rights_operation
import time: 551 | 551 | schemas.__private.operations.virtual.delayed_voting_operation
import time: 1879 | 1879 | schemas.__private.operations.virtual.dhf_conversion_operation
import time: 792 | 792 | schemas.__private.operations.virtual.dhf_funding_operation
import time: 3785 | 3785 | schemas.__private.operations.virtual.effective_comment_vote_operation
import time: 1604 | 1604 | schemas.__private.operations.virtual.escrow_approved_operation
import time: 2050 | 2050 | schemas.__private.operations.virtual.escrow_rejected_operation
import time: 447 | 447 | schemas.__private.operations.virtual.expired_account_notification_operation
import time: 1566 | 1566 | schemas.__private.operations.virtual.failed_recurrent_transfer_operation
import time: 1418 | 1418 | schemas.__private.operations.virtual.fill_collateralized_convert_request_operation
import time: 1111 | 1111 | schemas.__private.operations.virtual.fill_convert_request_operation
import time: 1897 | 1897 | schemas.__private.operations.virtual.fill_order_operation
import time: 1400 | 1400 | schemas.__private.operations.virtual.fill_recurrent_transfer_operation
import time: 1620 | 1620 | schemas.__private.operations.virtual.fill_transfer_from_savings_operation
import time: 1462 | 1462 | schemas.__private.operations.virtual.fill_vesting_withdraw_operation
import time: 2026 | 2026 | schemas.__private.operations.virtual.hardfork_hive_operation
import time: 1170 | 1170 | schemas.__private.operations.virtual.hardfork_hive_restore_operation
import time: 393 | 393 | schemas.__private.operations.virtual.hardfork_operation
import time: 523 | 523 | schemas.__private.operations.virtual.ineffective_delete_comment_operation
import time: 816 | 816 | schemas.__private.operations.virtual.interest_operation
import time: 1195 | 1195 | schemas.__private.operations.virtual.limit_order_cancelled_operation
import time: 741 | 741 | schemas.__private.operations.virtual.liquidity_reward_operation
import time: 1057 | 1057 | schemas.__private.operations.virtual.pow_reward_operation
import time: 437 | 437 | schemas.__private.operations.virtual.producer_missed_operation
import time: 983 | 983 | schemas.__private.operations.virtual.producer_reward_operation
import time: 1115 | 1115 | schemas.__private.operations.virtual.proposal_fee_operation
import time: 1276 | 1276 | schemas.__private.operations.virtual.proposal_pay_operation
import time: 607 | 607 | schemas.__private.operations.virtual.proxy_cleared_operation
import time: 739 | 739 | schemas.__private.operations.virtual.return_vesting_delegation_operation
import time: 517 | 517 | schemas.__private.operations.virtual.shutdown_witness_operation
import time: 350 | 350 | schemas.__private.operations.virtual.system_warning_operation
import time: 1199 | 1199 | schemas.__private.operations.virtual.transfer_to_vesting_completed_operation
import time: 995 | 995 | schemas.__private.operations.virtual.vesting_shares_split_operation
import time: 2325 | 52739 | schemas.__private.operations.virtual
import time: 855 | 855 | schemas.__private.operations.vote_operation
import time: 737 | 737 | schemas.__private.operations.withdraw_vesting_operation
import time: 545 | 545 | schemas.__private.operations.witness_block_approve_operation
import time: 1790 | 1790 | schemas.__private.operations.witness_set_properties_operation
import time: 1061 | 1061 | schemas.__private.operations.witness_update_operation
import time: 3668053 | 3773275 | schemas.__private.operations
import time: 31383 | 3804657 | schemas.__private.operation_objects
And full log of the suspected file only time python -X importtime schemas/__private/operations/__init__.py
:
import time: self [us] | cumulative | imported package
import time: 107 | 107 | _io
import time: 27 | 27 | marshal
import time: 229 | 229 | posix
import time: 389 | 750 | _frozen_importlib_external
import time: 61 | 61 | time
import time: 141 | 202 | zipimport
import time: 82 | 82 | _codecs
import time: 299 | 380 | codecs
import time: 273 | 273 | encodings.aliases
import time: 425 | 1077 | encodings
import time: 156 | 156 | encodings.utf_8
import time: 66 | 66 | _signal
import time: 36 | 36 | _abc
import time: 161 | 197 | abc
import time: 193 | 389 | io
import time: 39 | 39 | _stat
import time: 126 | 164 | stat
import time: 657 | 657 | _collections_abc
import time: 102 | 102 | genericpath
import time: 143 | 245 | posixpath
import time: 448 | 1513 | os
import time: 124 | 124 | _sitebuiltins
import time: 297 | 297 | sitecustomize
import time: 925 | 2857 | site
import time: 182 | 182 | __future__
import time: 69 | 69 | itertools
import time: 102 | 102 | keyword
import time: 87 | 87 | _operator
import time: 662 | 749 | operator
import time: 225 | 225 | reprlib
import time: 80 | 80 | _collections
import time: 631 | 1854 | collections
import time: 163 | 163 | collections.abc
import time: 196 | 196 | types
import time: 40 | 40 | _functools
import time: 423 | 658 | functools
import time: 379 | 1037 | contextlib
import time: 541 | 541 | enum
import time: 47 | 47 | _sre
import time: 243 | 243 | sre_constants
import time: 229 | 472 | sre_parse
import time: 199 | 717 | sre_compile
import time: 52 | 52 | _locale
import time: 127 | 127 | copyreg
import time: 383 | 1818 | re
import time: 1342 | 6213 | typing
import time: 105 | 105 | backports_abc
import time: 152 | 152 | _weakrefset
import time: 319 | 471 | weakref
import time: 75 | 75 | org
import time: 14 | 88 | org.python
import time: 14 | 102 | org.python.core
import time: 158 | 730 | copy
import time: 850 | 850 | _ast
import time: 900 | 1749 | ast
import time: 101 | 101 | _opcode
import time: 191 | 292 | opcode
import time: 314 | 606 | dis
import time: 273 | 273 | warnings
import time: 153 | 425 | importlib
import time: 149 | 573 | importlib.machinery
import time: 123 | 123 | token
import time: 655 | 777 | tokenize
import time: 113 | 890 | linecache
import time: 1143 | 4958 | inspect
import time: 405 | 5362 | dataclasses
import time: 1464 | 1464 | typing_extensions
import time: 83 | 83 | backports_abc
import time: 80 | 80 | backports_abc
import time: 245 | 245 | numbers
import time: 455 | 700 | _decimal
import time: 108 | 807 | decimal
import time: 127 | 127 | fnmatch
import time: 76 | 76 | _winapi
import time: 73 | 73 | nt
import time: 66 | 66 | nt
import time: 64 | 64 | nt
import time: 63 | 63 | nt
import time: 174 | 514 | ntpath
import time: 42 | 42 | errno
import time: 98 | 98 | urllib
import time: 712 | 810 | urllib.parse
import time: 532 | 2023 | pathlib
import time: 90 | 90 | backports_abc
import time: 595 | 684 | pydantic.typing
import time: 1307 | 4900 | pydantic.errors
import time: 82 | 82 | backports_abc
import time: 80 | 80 | backports_abc
import time: 182 | 262 | pydantic.version
import time: 915 | 1259 | pydantic.utils
import time: 542 | 6783 | pydantic.class_validators
import time: 166 | 166 | _json
import time: 317 | 482 | json.scanner
import time: 326 | 808 | json.decoder
import time: 333 | 333 | json.encoder
import time: 157 | 1296 | json
import time: 320 | 1616 | pydantic.config
import time: 82 | 82 | backports_abc
import time: 184 | 184 | math
import time: 170 | 170 | _datetime
import time: 504 | 857 | datetime
import time: 853 | 853 | ipaddress
import time: 601 | 601 | signal
import time: 397 | 397 | threading
import time: 115 | 115 | fcntl
import time: 115 | 115 | msvcrt
import time: 115 | 115 | _posixsubprocess
import time: 115 | 115 | select
import time: 354 | 354 | selectors
import time: 405 | 2214 | subprocess
import time: 1638 | 3852 | platform
import time: 161 | 161 | _uuid
import time: 332 | 4344 | uuid
import time: 81 | 81 | backports_abc
import time: 104 | 104 | colorsys
import time: 507 | 691 | pydantic.color
import time: 80 | 80 | backports_abc
import time: 80 | 80 | backports_abc
import time: 1880 | 1880 | pydantic.datetime_parse
import time: 507 | 2465 | pydantic.validators
import time: 881 | 3425 | pydantic.networks
import time: 82 | 82 | backports_abc
import time: 1912 | 1994 | pydantic.types
import time: 227 | 12389 | pydantic.json
import time: 532 | 13002 | pydantic.error_wrappers
import time: 84 | 84 | backports_abc
import time: 672 | 756 | pydantic.fields
import time: 82 | 82 | backports_abc
import time: 137 | 137 | _struct
import time: 105 | 241 | struct
import time: 181 | 181 | _compat_pickle
import time: 172 | 172 | _pickle
import time: 73 | 73 | org
import time: 13 | 86 | org.python
import time: 15 | 100 | org.python.core
import time: 666 | 1357 | pickle
import time: 254 | 1611 | pydantic.parse
import time: 84 | 84 | backports_abc
import time: 592 | 676 | pydantic.schema
import time: 1393 | 3760 | pydantic.main
import time: 636 | 34209 | pydantic.dataclasses
import time: 111 | 111 | backports_abc
import time: 314 | 424 | pydantic.annotated_types
import time: 336 | 336 | pydantic.decorator
import time: 83 | 83 | backports_abc
import time: 692 | 774 | pydantic.env_settings
import time: 227 | 227 | pydantic.tools
import time: 314 | 36282 | pydantic
import time: 156 | 156 | schemas
import time: 156 | 312 | schemas.__private
import time: 572 | 572 | pydantic.generics
import time: 98 | 98 | schemas.__private.hive_constants
import time: 514 | 514 | schemas.__private.preconfigured_base_model
import time: 8016 | 9508 | schemas.__private.hive_fields_basic_schemas
import time: 1368 | 1368 | schemas.__private.operations.account_create_operation
import time: 1041 | 1041 | schemas.__private.operations.account_update2_operation
import time: 1031 | 1031 | schemas.__private.operations.account_update_operation
import time: 606 | 606 | schemas.__private.operations.account_witness_proxy_operation
import time: 670 | 670 | schemas.__private.operations.account_witness_vote_operation
import time: 573 | 573 | schemas.__private.operations.cancel_transfer_from_savings_operation
import time: 591 | 591 | schemas.__private.operations.change_recovery_account_operation
import time: 1081 | 1081 | schemas.__private.operations.claim_account_operation
import time: 1904 | 1904 | schemas.__private.operations.claim_reward_balance_operation
import time: 880 | 880 | schemas.__private.operations.collateralized_convert_operation
import time: 1203 | 1203 | schemas.__private.operations.comment_operation
import time: 1218 | 1218 | schemas.__private.operations.comment_options_operation
import time: 923 | 923 | schemas.__private.operations.convert_operation
import time: 1032 | 1032 | schemas.__private.operations.create_claimed_account_operation
import time: 1254 | 1254 | schemas.__private.operations.create_proposal_operation
import time: 1120 | 1120 | schemas.__private.operations.custom_binary_operation
import time: 1027 | 1027 | schemas.__private.operations.custom_json_operation
import time: 677 | 677 | schemas.__private.operations.custom_operation
import time: 540 | 540 | schemas.__private.operations.decline_voting_rights_operation
import time: 911 | 911 | schemas.__private.operations.delegate_vesting_shares_operation
import time: 520 | 520 | schemas.__private.operations.delete_comment_operation
import time: 1516 | 1516 | schemas.__private.operations.escrow_approve_operation
import time: 1855 | 1855 | schemas.__private.operations.escrow_dispute_operation
import time: 1800 | 1800 | schemas.__private.operations.escrow_release_operation
import time: 2478 | 2478 | schemas.__private.operations.escrow_transfer_operation
import time: 2157 | 2157 | schemas.__private.operations.feed_publish_operation
import time: 590 | 590 | schemas.__private.operations.limit_order_cancel_operation
import time: 1428 | 1428 | schemas.__private.operations.limit_order_create2_operation
import time: 1841 | 1841 | schemas.__private.operations.limit_order_create_operation
import time: 8751 | 8751 | schemas.__private.hive_fields_custom_schemas
import time: 2077 | 10827 | schemas.__private.operations.pow_operation
import time: 635 | 635 | schemas.__private.operations.recover_account_operation
import time: 1512 | 1512 | schemas.__private.operations.recurrent_transfer_operation
import time: 561 | 561 | schemas.__private.operations.remove_proposal_operation
import time: 662 | 662 | schemas.__private.operations.request_account_recovery_operation
import time: 655 | 655 | schemas.__private.operations.reset_account_operation
import time: 778 | 778 | schemas.__private.operations.set_reset_account_operation
import time: 831 | 831 | schemas.__private.operations.set_withdraw_vesting_route_operation
import time: 1403 | 1403 | schemas.__private.operations.transfer_from_savings_operation
import time: 1247 | 1247 | schemas.__private.operations.transfer_operation
import time: 1282 | 1282 | schemas.__private.operations.transfer_to_savings_operation
import time: 1092 | 1092 | schemas.__private.operations.transfer_to_vesting_operation
import time: 1079 | 1079 | schemas.__private.operations.update_proposal_operation
import time: 642 | 642 | schemas.__private.operations.update_proposal_votes_operation
import time: 1324 | 1324 | schemas.__private.operations.virtual.account_created_operation
import time: 1684 | 1684 | schemas.__private.operations.virtual.author_reward_operation
import time: 834 | 834 | schemas.__private.operations.virtual.changed_recovery_account_operation
import time: 1124 | 1124 | schemas.__private.operations.virtual.clear_null_account_balance_operation
import time: 916 | 916 | schemas.__private.operations.virtual.collateralized_convert_immediate_conversion_operation
import time: 1560 | 1560 | schemas.__private.operations.virtual.comment_benefactor_reward_operation
import time: 523 | 523 | schemas.__private.operations.virtual.comment_payout_update_operation
import time: 1753 | 1753 | schemas.__private.operations.virtual.comment_reward_operation
import time: 1095 | 1095 | schemas.__private.operations.virtual.consolidate_treasury_balance_operation
import time: 1055 | 1055 | schemas.__private.operations.virtual.curation_reward_operation
import time: 434 | 434 | schemas.__private.operations.virtual.declined_voting_rights_operation
import time: 564 | 564 | schemas.__private.operations.virtual.delayed_voting_operation
import time: 1043 | 1043 | schemas.__private.operations.virtual.dhf_conversion_operation
import time: 790 | 790 | schemas.__private.operations.virtual.dhf_funding_operation
import time: 4386 | 4386 | schemas.__private.operations.virtual.effective_comment_vote_operation
import time: 1620 | 1620 | schemas.__private.operations.virtual.escrow_approved_operation
import time: 2019 | 2019 | schemas.__private.operations.virtual.escrow_rejected_operation
import time: 447 | 447 | schemas.__private.operations.virtual.expired_account_notification_operation
import time: 1583 | 1583 | schemas.__private.operations.virtual.failed_recurrent_transfer_operation
import time: 1406 | 1406 | schemas.__private.operations.virtual.fill_collateralized_convert_request_operation
import time: 1185 | 1185 | schemas.__private.operations.virtual.fill_convert_request_operation
import time: 1972 | 1972 | schemas.__private.operations.virtual.fill_order_operation
import time: 1427 | 1427 | schemas.__private.operations.virtual.fill_recurrent_transfer_operation
import time: 1422 | 1422 | schemas.__private.operations.virtual.fill_transfer_from_savings_operation
import time: 1488 | 1488 | schemas.__private.operations.virtual.fill_vesting_withdraw_operation
import time: 1906 | 1906 | schemas.__private.operations.virtual.hardfork_hive_operation
import time: 1159 | 1159 | schemas.__private.operations.virtual.hardfork_hive_restore_operation
import time: 431 | 431 | schemas.__private.operations.virtual.hardfork_operation
import time: 517 | 517 | schemas.__private.operations.virtual.ineffective_delete_comment_operation
import time: 831 | 831 | schemas.__private.operations.virtual.interest_operation
import time: 1112 | 1112 | schemas.__private.operations.virtual.limit_order_cancelled_operation
import time: 793 | 793 | schemas.__private.operations.virtual.liquidity_reward_operation
import time: 1058 | 1058 | schemas.__private.operations.virtual.pow_reward_operation
import time: 440 | 440 | schemas.__private.operations.virtual.producer_missed_operation
import time: 1003 | 1003 | schemas.__private.operations.virtual.producer_reward_operation
import time: 1003 | 1003 | schemas.__private.operations.virtual.proposal_fee_operation
import time: 1342 | 1342 | schemas.__private.operations.virtual.proposal_pay_operation
import time: 589 | 589 | schemas.__private.operations.virtual.proxy_cleared_operation
import time: 1057 | 1057 | schemas.__private.operations.virtual.return_vesting_delegation_operation
import time: 506 | 506 | schemas.__private.operations.virtual.shutdown_witness_operation
import time: 432 | 432 | schemas.__private.operations.virtual.system_warning_operation
import time: 1272 | 1272 | schemas.__private.operations.virtual.transfer_to_vesting_completed_operation
import time: 1034 | 1034 | schemas.__private.operations.virtual.vesting_shares_split_operation
import time: 2334 | 52451 | schemas.__private.operations.virtual
import time: 829 | 829 | schemas.__private.operations.vote_operation
import time: 836 | 836 | schemas.__private.operations.withdraw_vesting_operation
import time: 547 | 547 | schemas.__private.operations.witness_block_approve_operation
import time: 1697 | 1697 | schemas.__private.operations.witness_set_properties_operation
import time: 1204 | 1204 | schemas.__private.operations.witness_update_operation
import time: 4073868 | 4188449 | schemas.__private.operations
import time: 31 | 4188479 | schemas.__private.operations.account_create_operation
python -X importtime 8,27s user 0,13s system 100% cpu 8,402 total
Edited by Mateusz Żebrak