funboost 48.0__tar.gz → 48.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of funboost might be problematic. Click here for more details.
- {funboost-48.0/funboost.egg-info → funboost-48.2}/PKG-INFO +7 -92
- {funboost-48.0 → funboost-48.2}/README.md +5 -9
- {funboost-48.0 → funboost-48.2}/funboost/__init__.py +1 -1
- {funboost-48.0 → funboost-48.2}/funboost/constant.py +7 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/base_consumer.py +137 -68
- funboost-48.2/funboost/core/active_cousumer_info_getter.py +162 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/function_result_status_saver.py +1 -1
- funboost-48.2/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
- funboost-48.2/funboost/function_result_web/__pycache__/functions.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/app.py +104 -7
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/functions.py +17 -4
- funboost-48.2/funboost/function_result_web/static/css/content_page_style.css +39 -0
- funboost-48.2/funboost/function_result_web/static/images/favicon.ico +0 -0
- funboost-48.2/funboost/function_result_web/static/js/bootstrap-datetimepicker.min.js +2 -0
- funboost-48.2/funboost/function_result_web/static/js/echarts.min.js +32478 -0
- funboost-48.2/funboost/function_result_web/static/js/moment-with-locales.min.js +1 -0
- funboost-48.2/funboost/function_result_web/static/js/select2.min.js +2 -0
- funboost-48.2/funboost/function_result_web/templates/about.html +67 -0
- funboost-48.2/funboost/function_result_web/templates/conusme_speed.html +217 -0
- funboost-48.2/funboost/function_result_web/templates/fun_result_table.html +433 -0
- funboost-48.2/funboost/function_result_web/templates/index.html +233 -0
- funboost-48.0/funboost/function_result_web/templates/index.html → funboost-48.2/funboost/function_result_web/templates/index_backup.html +94 -81
- funboost-48.2/funboost/function_result_web/templates/index_/344/270/215/345/217/257/346/212/230/345/217/240.html +153 -0
- funboost-48.2/funboost/function_result_web/templates/queue_op.html +501 -0
- funboost-48.2/funboost/function_result_web/templates/running_consumer_by_ip.html +219 -0
- funboost-48.2/funboost/function_result_web/templates/running_consumer_by_queue_name.html +220 -0
- {funboost-48.0 → funboost-48.2}/funboost/timing_job/timing_push.py +24 -24
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -6
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -6
- {funboost-48.0 → funboost-48.2/funboost.egg-info}/PKG-INFO +7 -92
- {funboost-48.0 → funboost-48.2}/funboost.egg-info/SOURCES.txt +15 -0
- {funboost-48.0 → funboost-48.2}/funboost.egg-info/requires.txt +1 -1
- {funboost-48.0 → funboost-48.2}/setup.py +1 -1
- funboost-48.0/funboost/core/active_cousumer_info_getter.py +0 -82
- funboost-48.0/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/LICENSE +0 -0
- {funboost-48.0 → funboost-48.2}/MANIFEST.in +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/__init__old.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/__main__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/celery_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/dramatiq_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/faststream_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/huey_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/rocketry_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/rq_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/rq_windows_worker.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/assist/taskiq_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/async_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/async_pool_executor.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/backup/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/base_pool_type.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/custom_threadpool_executor.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/pool_commons.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/concurrent_pool/single_thread_executor.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/celery_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/confirm_mixin.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/dramatiq_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/empty_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/faststream_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/http_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/http_consumer000.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/httpsqs_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/huey_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/kafka_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/kombu_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/local_python_queue_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/memory_deque_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/mongomq_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/mqtt_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/nameko_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/nats_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/nsq_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/peewee_conusmer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/persist_queue_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/pulsar_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_consumer_ack_able.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_consumer_ack_using_timeout.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_consumer_priority.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_consumer_simple.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_filter.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_pubsub_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/redis_stream_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/rocketmq_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/rq_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/sqlachemy_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/tcp_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/txt_file_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/udp_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/consumers/zeromq_consumer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/contrib/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/contrib/api_publish_msg.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/contrib/django_db_deco.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/contrib/queue2queue.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/booster.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/cli/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/cli/discovery_boosters.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/cli/funboost_fire.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/current_task.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/exceptions.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/fabric_deploy_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/funboost_config_getter.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/funboost_time.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/func_params_model.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/function_result_status_config.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/helper_funs.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/kill_remote_task.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/lazy_impoter.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/loggers.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/msg_result_getter.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/muliti_process_enhance.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/serialization.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/core/task_id_logger.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/factories/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/factories/consumer_factory.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/factories/publisher_factotry.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/funboost_config_deafult.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/assets/css/custom.css +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/assets/js/custom.js +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/css/style.css +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/images/bg.jpg +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/images/password.png +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/images/tick.png +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/images/user.png +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/function_result_web/templates/login.html +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/base_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/celery_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/celery_publisher000.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/confluent_kafka_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/dramatiq_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/empty_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/faststream_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/http_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/httpsqs_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/huey_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/kafka_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/kombu_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/local_python_queue_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/meomory_deque_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/mongomq_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/mqtt_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/nameko_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/nats_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/nsq_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/peewee_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/persist_queue_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/pulsar_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/redis_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/redis_publisher_lpush.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/redis_publisher_priority.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/redis_publisher_simple.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/redis_pubsub_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/redis_stream_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/rocketmq_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/rq_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/sqla_queue_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/tcp_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/txt_file_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/udp_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/publishers/zeromq_publisher.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/queues/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/queues/memory_queues_map.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/queues/peewee_queue.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/queues/sqla_queue.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/set_frame_config.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/timing_job/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/timing_job/timing_job_base.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/apscheduler_monkey.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/block_exit.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/bulk_operation.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/class_utils.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/class_utils2.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/ctrl_c_end.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/custom_pysnooper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/decorators.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc2222.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/develop_log.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/expire_lock.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/func_timeout/StoppableThread.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/func_timeout/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/func_timeout/dafunc.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/func_timeout/exceptions.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/func_timeout/py2_raise.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/func_timeout/py3_raise.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/json_helper.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/mongo_util.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/monkey_color_log.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/monkey_patches.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/mqtt_util.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/paramiko_util.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/pysnooper_ydf/utils.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/pysnooper_ydf/variables.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/rabbitmq_factory.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/redis_manager.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/redis_manager_old.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/resource_monitoring.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/restart_python.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/simple_data_class.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/str_utils.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/time_util.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/times/__init__.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/times/version.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost/utils/un_strict_json_dumps.py +0 -0
- {funboost-48.0 → funboost-48.2}/funboost.egg-info/dependency_links.txt +0 -0
- {funboost-48.0 → funboost-48.2}/funboost.egg-info/entry_points.txt +0 -0
- {funboost-48.0 → funboost-48.2}/funboost.egg-info/top_level.txt +0 -0
- {funboost-48.0 → funboost-48.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: funboost
|
|
3
|
-
Version: 48.
|
|
3
|
+
Version: 48.2
|
|
4
4
|
Summary: pip install funboost,python全功能分布式函数调度框架,funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
|
|
5
5
|
Home-page: https://github.com/ydf0509/funboost
|
|
6
6
|
Author: bfzs
|
|
@@ -26,97 +26,10 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
26
26
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
27
27
|
Classifier: Topic :: Software Development :: Libraries
|
|
28
28
|
Description-Content-Type: text/markdown
|
|
29
|
-
License-File: LICENSE
|
|
30
|
-
Requires-Dist: nb_log>=13.2
|
|
31
|
-
Requires-Dist: nb_libs>=1.8
|
|
32
|
-
Requires-Dist: nb_time>=2.1
|
|
33
|
-
Requires-Dist: pymongo>=4.6.3
|
|
34
|
-
Requires-Dist: AMQPStorm==2.10.6
|
|
35
|
-
Requires-Dist: rabbitpy==2.0.1
|
|
36
|
-
Requires-Dist: decorator==5.1.1
|
|
37
|
-
Requires-Dist: tomorrow3==1.1.0
|
|
38
|
-
Requires-Dist: persist-queue>=0.4.2
|
|
39
|
-
Requires-Dist: apscheduler>=3.10.1
|
|
40
|
-
Requires-Dist: pikav0
|
|
41
|
-
Requires-Dist: pikav1
|
|
42
|
-
Requires-Dist: redis2
|
|
43
|
-
Requires-Dist: redis3
|
|
44
|
-
Requires-Dist: redis5
|
|
45
|
-
Requires-Dist: redis
|
|
46
|
-
Requires-Dist: setuptools_rust
|
|
47
|
-
Requires-Dist: fabric2>=2.6.0
|
|
48
|
-
Requires-Dist: nb_filelock
|
|
49
|
-
Requires-Dist: pysnooper
|
|
50
|
-
Requires-Dist: deprecated
|
|
51
|
-
Requires-Dist: cryptography
|
|
52
|
-
Requires-Dist: auto_run_on_remote
|
|
53
|
-
Requires-Dist: frozenlist
|
|
54
|
-
Requires-Dist: fire
|
|
55
|
-
Requires-Dist: pydantic
|
|
56
|
-
Requires-Dist: orjson
|
|
57
|
-
Requires-Dist: async-timeout
|
|
58
|
-
Requires-Dist: typing-extensions
|
|
59
29
|
Provides-Extra: all
|
|
60
|
-
|
|
61
|
-
Requires-Dist: pulsar-client==3.1.0; python_version >= "3.7" and extra == "all"
|
|
62
|
-
Requires-Dist: celery; extra == "all"
|
|
63
|
-
Requires-Dist: flower; extra == "all"
|
|
64
|
-
Requires-Dist: nameko==2.14.1; extra == "all"
|
|
65
|
-
Requires-Dist: sqlalchemy==1.4.13; extra == "all"
|
|
66
|
-
Requires-Dist: sqlalchemy_utils==0.36.1; extra == "all"
|
|
67
|
-
Requires-Dist: dramatiq==1.14.2; extra == "all"
|
|
68
|
-
Requires-Dist: huey==2.4.5; extra == "all"
|
|
69
|
-
Requires-Dist: rq==1.15.0; extra == "all"
|
|
70
|
-
Requires-Dist: kombu; extra == "all"
|
|
71
|
-
Requires-Dist: eventlet==0.33.3; extra == "all"
|
|
72
|
-
Requires-Dist: gevent==22.10.2; extra == "all"
|
|
73
|
-
Requires-Dist: elasticsearch; extra == "all"
|
|
74
|
-
Requires-Dist: gnsq==1.0.1; extra == "all"
|
|
75
|
-
Requires-Dist: psutil; extra == "all"
|
|
76
|
-
Requires-Dist: peewee==3.17.3; extra == "all"
|
|
77
|
-
Requires-Dist: nats-python; extra == "all"
|
|
78
|
-
Requires-Dist: aiohttp==3.8.3; extra == "all"
|
|
79
|
-
Requires-Dist: paho-mqtt; extra == "all"
|
|
80
|
-
Requires-Dist: rocketmq; extra == "all"
|
|
81
|
-
Requires-Dist: zmq; extra == "all"
|
|
82
|
-
Requires-Dist: pyzmq; extra == "all"
|
|
83
|
-
Requires-Dist: kafka-python==2.0.2; extra == "all"
|
|
84
|
-
Requires-Dist: flask; extra == "all"
|
|
85
|
-
Requires-Dist: flask_bootstrap; extra == "all"
|
|
86
|
-
Requires-Dist: flask_wtf; extra == "all"
|
|
87
|
-
Requires-Dist: wtforms; extra == "all"
|
|
88
|
-
Requires-Dist: flask_login; extra == "all"
|
|
89
|
-
Provides-Extra: extra-brokers
|
|
90
|
-
Requires-Dist: confluent_kafka==1.7.0; extra == "extra-brokers"
|
|
91
|
-
Requires-Dist: pulsar-client==3.1.0; python_version >= "3.7" and extra == "extra-brokers"
|
|
92
|
-
Requires-Dist: celery; extra == "extra-brokers"
|
|
93
|
-
Requires-Dist: flower; extra == "extra-brokers"
|
|
94
|
-
Requires-Dist: nameko==2.14.1; extra == "extra-brokers"
|
|
95
|
-
Requires-Dist: sqlalchemy==1.4.13; extra == "extra-brokers"
|
|
96
|
-
Requires-Dist: sqlalchemy_utils==0.36.1; extra == "extra-brokers"
|
|
97
|
-
Requires-Dist: dramatiq==1.14.2; extra == "extra-brokers"
|
|
98
|
-
Requires-Dist: huey==2.4.5; extra == "extra-brokers"
|
|
99
|
-
Requires-Dist: rq==1.15.0; extra == "extra-brokers"
|
|
100
|
-
Requires-Dist: kombu; extra == "extra-brokers"
|
|
101
|
-
Requires-Dist: eventlet==0.33.3; extra == "extra-brokers"
|
|
102
|
-
Requires-Dist: gevent==22.10.2; extra == "extra-brokers"
|
|
103
|
-
Requires-Dist: elasticsearch; extra == "extra-brokers"
|
|
104
|
-
Requires-Dist: gnsq==1.0.1; extra == "extra-brokers"
|
|
105
|
-
Requires-Dist: psutil; extra == "extra-brokers"
|
|
106
|
-
Requires-Dist: peewee==3.17.3; extra == "extra-brokers"
|
|
107
|
-
Requires-Dist: nats-python; extra == "extra-brokers"
|
|
108
|
-
Requires-Dist: aiohttp==3.8.3; extra == "extra-brokers"
|
|
109
|
-
Requires-Dist: paho-mqtt; extra == "extra-brokers"
|
|
110
|
-
Requires-Dist: rocketmq; extra == "extra-brokers"
|
|
111
|
-
Requires-Dist: zmq; extra == "extra-brokers"
|
|
112
|
-
Requires-Dist: pyzmq; extra == "extra-brokers"
|
|
113
|
-
Requires-Dist: kafka-python==2.0.2; extra == "extra-brokers"
|
|
30
|
+
Provides-Extra: extra_brokers
|
|
114
31
|
Provides-Extra: flask
|
|
115
|
-
|
|
116
|
-
Requires-Dist: flask_bootstrap; extra == "flask"
|
|
117
|
-
Requires-Dist: flask_wtf; extra == "flask"
|
|
118
|
-
Requires-Dist: wtforms; extra == "flask"
|
|
119
|
-
Requires-Dist: flask_login; extra == "flask"
|
|
32
|
+
License-File: LICENSE
|
|
120
33
|
|
|
121
34
|
|
|
122
35
|
|
|
@@ -146,7 +59,7 @@ funboost的功能是全面性重量级,用户能想得到的功能99%全都有
|
|
|
146
59
|
|
|
147
60
|
python函数加速器,框架包罗万象,一统编程思维,兼容50% python编程业务场景,适用范围广。
|
|
148
61
|
python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件(或任务队列框架),
|
|
149
|
-
30种任务控制功能。给任意python函数赋能。
|
|
62
|
+
30种任务控制功能。给任意python函数赋能。
|
|
150
63
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
151
64
|
|
|
152
65
|
框架只需要学习@boost这一个装饰器的入参就可以,所有用法几乎和1.3例子一摸一样,非常简化简单。
|
|
@@ -528,7 +441,9 @@ if __name__ == "__main__":
|
|
|
528
441
|
|
|
529
442
|
<a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
|
|
530
443
|
|
|
531
|
-
|
|
444
|
+
[](https://imgse.com/i/pEGDim8)
|
|
445
|
+
[](https://imgse.com/i/pEGD96P)
|
|
446
|
+
[](https://imgse.com/i/pEGDCOf)
|
|
532
447
|
|
|
533
448
|
## 1.4 python分布式函数执行为什么重要?
|
|
534
449
|
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
noteId: "5f9681b0e9bb11efa4500f7226f4d3b6"
|
|
3
|
-
tags: []
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
1
|
|
|
8
2
|
|
|
9
3
|
# 1.python万能分布式函数调度框架简funboost简介
|
|
@@ -32,7 +26,7 @@ funboost的功能是全面性重量级,用户能想得到的功能99%全都有
|
|
|
32
26
|
|
|
33
27
|
python函数加速器,框架包罗万象,一统编程思维,兼容50% python编程业务场景,适用范围广。
|
|
34
28
|
python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件(或任务队列框架),
|
|
35
|
-
30种任务控制功能。给任意python函数赋能。
|
|
29
|
+
30种任务控制功能。给任意python函数赋能。
|
|
36
30
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
37
31
|
|
|
38
32
|
框架只需要学习@boost这一个装饰器的入参就可以,所有用法几乎和1.3例子一摸一样,非常简化简单。
|
|
@@ -414,7 +408,9 @@ if __name__ == "__main__":
|
|
|
414
408
|
|
|
415
409
|
<a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
|
|
416
410
|
|
|
417
|
-
|
|
411
|
+
[](https://imgse.com/i/pEGDim8)
|
|
412
|
+
[](https://imgse.com/i/pEGD96P)
|
|
413
|
+
[](https://imgse.com/i/pEGDCOf)
|
|
418
414
|
|
|
419
415
|
## 1.4 python分布式函数执行为什么重要?
|
|
420
416
|
|
|
@@ -479,4 +475,4 @@ funboost通过支持celery作为broker_kind,使celer框架变成了funboost的
|
|
|
479
475
|
|
|
480
476
|

|
|
481
477
|
|
|
482
|
-
<div> </div>
|
|
478
|
+
<div> </div>
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
# coding= utf-8
|
|
2
|
+
from calendar import c
|
|
3
|
+
|
|
4
|
+
|
|
2
5
|
class BrokerEnum:
|
|
3
6
|
EMPTY = 'empty' # 空的实现,需要搭配 boost入参的 consumer_override_cls 和 publisher_override_cls使用,或者被继承。
|
|
4
7
|
|
|
@@ -106,3 +109,7 @@ class ConstStrForClassMethod:
|
|
|
106
109
|
CLS_MODULE = 'cls_module'
|
|
107
110
|
CLS_FILE = 'cls_file'
|
|
108
111
|
|
|
112
|
+
class RedisKeys:
|
|
113
|
+
REDIS_KEY_PAUSE_FLAG = 'funboost_pause_flag'
|
|
114
|
+
REDIS_KEY_STOP_FLAG = 'funboost_stop_flag'
|
|
115
|
+
QUEUE__MSG_COUNT_MAP = 'funboost_queue__msg_count_map'
|
|
@@ -74,7 +74,7 @@ from funboost.consumers.redis_filter import RedisFilter, RedisImpermanencyFilter
|
|
|
74
74
|
from funboost.factories.publisher_factotry import get_publisher
|
|
75
75
|
|
|
76
76
|
from funboost.utils import decorators, time_util, redis_manager
|
|
77
|
-
from funboost.constant import ConcurrentModeEnum, BrokerEnum, ConstStrForClassMethod
|
|
77
|
+
from funboost.constant import ConcurrentModeEnum, BrokerEnum, ConstStrForClassMethod,RedisKeys
|
|
78
78
|
from funboost.core import kill_remote_task
|
|
79
79
|
from funboost.core.exceptions import ExceptionForRequeue, ExceptionForPushToDlxqueue
|
|
80
80
|
|
|
@@ -164,19 +164,25 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
164
164
|
filter_class = RedisFilter if consumer_params.task_filtering_expire_seconds == 0 else RedisImpermanencyFilter
|
|
165
165
|
self._redis_filter = filter_class(self._redis_filter_key_name, consumer_params.task_filtering_expire_seconds)
|
|
166
166
|
|
|
167
|
-
self._unit_time_for_count = 10 # 每隔多少秒计数,显示单位时间内执行多少次,暂时固定为10秒。
|
|
168
|
-
self._execute_task_times_every_unit_time = 0 # 每单位时间执行了多少次任务。
|
|
169
167
|
self._lock_for_count_execute_task_times_every_unit_time = Lock()
|
|
170
|
-
self.
|
|
171
|
-
self.
|
|
172
|
-
self.
|
|
173
|
-
|
|
174
|
-
self.
|
|
175
|
-
self.
|
|
176
|
-
|
|
177
|
-
self.
|
|
178
|
-
self.
|
|
179
|
-
|
|
168
|
+
# self._unit_time_for_count = 10 # 每隔多少秒计数,显示单位时间内执行多少次,暂时固定为10秒。
|
|
169
|
+
# self._execute_task_times_every_unit_time = 0 # 每单位时间执行了多少次任务。
|
|
170
|
+
# self._execute_task_times_every_unit_time_fail =0 # 每单位时间执行了多少次任务失败。
|
|
171
|
+
# self._lock_for_count_execute_task_times_every_unit_time = Lock()
|
|
172
|
+
# self._current_time_for_execute_task_times_every_unit_time = time.time()
|
|
173
|
+
# self._consuming_function_cost_time_total_every_unit_time = 0
|
|
174
|
+
# self._last_execute_task_time = time.time() # 最近一次执行任务的时间。
|
|
175
|
+
# self._last_10s_execute_count = 0
|
|
176
|
+
# self._last_10s_execute_count_fail = 0
|
|
177
|
+
#
|
|
178
|
+
# self._last_show_remaining_execution_time = 0
|
|
179
|
+
# self._show_remaining_execution_time_interval = 300
|
|
180
|
+
#
|
|
181
|
+
# self._msg_num_in_broker = 0
|
|
182
|
+
# self._last_timestamp_when_has_task_in_queue = 0
|
|
183
|
+
# self._last_timestamp_print_msg_num = 0
|
|
184
|
+
|
|
185
|
+
self.metric_calculation = MetricCalculation(self)
|
|
180
186
|
|
|
181
187
|
self._result_persistence_helper: ResultPersistenceHelper
|
|
182
188
|
self._check_broker_exclusive_config()
|
|
@@ -189,8 +195,8 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
189
195
|
self._stop_flag = None
|
|
190
196
|
self._pause_flag = None # 暂停消费标志,从reids读取
|
|
191
197
|
self._last_show_pause_log_time = 0
|
|
192
|
-
self._redis_key_stop_flag = f'funboost_stop_flag
|
|
193
|
-
self._redis_key_pause_flag =
|
|
198
|
+
# self._redis_key_stop_flag = f'funboost_stop_flag'
|
|
199
|
+
# self._redis_key_pause_flag = RedisKeys.REDIS_KEY_PAUSE_FLAG
|
|
194
200
|
|
|
195
201
|
# 控频要用到的成员变量
|
|
196
202
|
self._last_submit_task_timestamp = 0
|
|
@@ -358,7 +364,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
358
364
|
self._distributed_consumer_statistics.run()
|
|
359
365
|
self.logger.warning(f'启动了分布式环境 使用 redis 的键 hearbeat:{self._queue_name} 统计活跃消费者 ,当前消费者唯一标识为 {self.consumer_identification}')
|
|
360
366
|
|
|
361
|
-
self.keep_circulating(60, block=False, daemon=False)(self.check_heartbeat_and_message_count)()
|
|
367
|
+
self.keep_circulating(60, block=False, daemon=False)(self.check_heartbeat_and_message_count)()
|
|
362
368
|
if self.consumer_params.is_support_remote_kill_task:
|
|
363
369
|
kill_remote_task.RemoteTaskKiller(self.queue_name, None).start_cycle_kill_task()
|
|
364
370
|
self.consumer_params.is_show_message_get_from_broker = True # 方便用户看到从消息队列取出来的消息的task_id,然后使用task_id杀死运行中的消息。
|
|
@@ -677,26 +683,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
677
683
|
p.execute()
|
|
678
684
|
|
|
679
685
|
with self._lock_for_count_execute_task_times_every_unit_time:
|
|
680
|
-
self.
|
|
681
|
-
self._consuming_function_cost_time_total_every_unit_time += time.time() - t_start_run_fun
|
|
682
|
-
self._last_execute_task_time = time.time()
|
|
683
|
-
if time.time() - self._current_time_for_execute_task_times_every_unit_time > self._unit_time_for_count:
|
|
684
|
-
avarage_function_spend_time = round(self._consuming_function_cost_time_total_every_unit_time / self._execute_task_times_every_unit_time, 4)
|
|
685
|
-
msg = f'{self._unit_time_for_count} 秒内执行了 {self._execute_task_times_every_unit_time} 次函数 [ {self.consuming_function.__name__} ] ,' \
|
|
686
|
-
f'函数平均运行耗时 {avarage_function_spend_time} 秒。 '
|
|
687
|
-
self.logger.info(msg)
|
|
688
|
-
if time.time() - self._last_show_remaining_execution_time > self._show_remaining_execution_time_interval:
|
|
689
|
-
self._msg_num_in_broker = self.publisher_of_same_queue.get_message_count()
|
|
690
|
-
if self._msg_num_in_broker != -1: # 有的中间件无法统计或没实现统计队列剩余数量的,统一返回的是-1,不显示这句话。
|
|
691
|
-
# msg += f''' ,预计还需要 {time_util.seconds_to_hour_minute_second(self._msg_num_in_broker * avarage_function_spend_time / active_consumer_num)} 时间 才能执行完成 {self._msg_num_in_broker}个剩余的任务'''
|
|
692
|
-
need_time = time_util.seconds_to_hour_minute_second(self._msg_num_in_broker / (self._execute_task_times_every_unit_time / self._unit_time_for_count) /
|
|
693
|
-
self._distributed_consumer_statistics.active_consumer_num)
|
|
694
|
-
msg += f''' 预计还需要 {need_time} 时间 才能执行完成 队列 {self.queue_name} 中的 {self._msg_num_in_broker} 个剩余任务'''
|
|
695
|
-
self.logger.info(msg)
|
|
696
|
-
self._last_show_remaining_execution_time = time.time()
|
|
697
|
-
self._current_time_for_execute_task_times_every_unit_time = time.time()
|
|
698
|
-
self._consuming_function_cost_time_total_every_unit_time = 0
|
|
699
|
-
self._execute_task_times_every_unit_time = 0
|
|
686
|
+
self.metric_calculation.cal(t_start_run_fun,current_function_result_status)
|
|
700
687
|
self.user_custom_record_process_info_func(current_function_result_status) # 两种方式都可以自定义,记录结果,建议继承方式,不使用boost中指定 user_custom_record_process_info_func
|
|
701
688
|
if self.consumer_params.user_custom_record_process_info_func:
|
|
702
689
|
self.consumer_params.user_custom_record_process_info_func(current_function_result_status)
|
|
@@ -850,24 +837,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
850
837
|
await simple_run_in_executor(push_result)
|
|
851
838
|
|
|
852
839
|
# 异步执行不存在线程并发,不需要加锁。
|
|
853
|
-
self.
|
|
854
|
-
self._consuming_function_cost_time_total_every_unit_time += time.time() - t_start_run_fun
|
|
855
|
-
self._last_execute_task_time = time.time()
|
|
856
|
-
if time.time() - self._current_time_for_execute_task_times_every_unit_time > self._unit_time_for_count:
|
|
857
|
-
avarage_function_spend_time = round(self._consuming_function_cost_time_total_every_unit_time / self._execute_task_times_every_unit_time, 4)
|
|
858
|
-
msg = f'{self._unit_time_for_count} 秒内执行了 {self._execute_task_times_every_unit_time} 次函数 [ {self.consuming_function.__name__} ] ,' \
|
|
859
|
-
f'函数平均运行耗时 {avarage_function_spend_time} 秒。 '
|
|
860
|
-
self.logger.info(msg)
|
|
861
|
-
if self._msg_num_in_broker != -1 and time.time() - self._last_show_remaining_execution_time > self._show_remaining_execution_time_interval: # 有的中间件无法统计或没实现统计队列剩余数量的,统一返回的是-1,不显示这句话。
|
|
862
|
-
# msg += f''' ,预计还需要 {time_util.seconds_to_hour_minute_second(self._msg_num_in_broker * avarage_function_spend_time / active_consumer_num)} 时间 才能执行完成 {self._msg_num_in_broker}个剩余的任务'''
|
|
863
|
-
need_time = time_util.seconds_to_hour_minute_second(self._msg_num_in_broker / (self._execute_task_times_every_unit_time / self._unit_time_for_count) /
|
|
864
|
-
self._distributed_consumer_statistics.active_consumer_num)
|
|
865
|
-
msg += f''' 预计还需要 {need_time} 时间 才能执行完成 队列 {self.queue_name} 中的 {self._msg_num_in_broker} 个剩余任务'''
|
|
866
|
-
self.logger.info(msg)
|
|
867
|
-
self._last_show_remaining_execution_time = time.time()
|
|
868
|
-
self._current_time_for_execute_task_times_every_unit_time = time.time()
|
|
869
|
-
self._consuming_function_cost_time_total_every_unit_time = 0
|
|
870
|
-
self._execute_task_times_every_unit_time = 0
|
|
840
|
+
self.metric_calculation.cal(t_start_run_fun, current_function_result_status)
|
|
871
841
|
|
|
872
842
|
self.user_custom_record_process_info_func(current_function_result_status) # 两种方式都可以自定义,记录结果.建议使用文档4.21.b的方式继承来重写
|
|
873
843
|
await self.aio_user_custom_record_process_info_func(current_function_result_status)
|
|
@@ -954,14 +924,15 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
954
924
|
raise NotImplementedError
|
|
955
925
|
|
|
956
926
|
def check_heartbeat_and_message_count(self):
|
|
957
|
-
self.
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
927
|
+
self.metric_calculation.msg_num_in_broker = self.publisher_of_same_queue.get_message_count()
|
|
928
|
+
self.metric_calculation.last_get_msg_num_ts = time.time()
|
|
929
|
+
if time.time() - self.metric_calculation.last_timestamp_print_msg_num > 600:
|
|
930
|
+
if self.metric_calculation.msg_num_in_broker != -1:
|
|
931
|
+
self.logger.info(f'队列 [{self._queue_name}] 中还有 [{self.metric_calculation.msg_num_in_broker}] 个任务')
|
|
932
|
+
self.metric_calculation.last_timestamp_print_msg_num = time.time()
|
|
933
|
+
if self.metric_calculation.msg_num_in_broker != 0:
|
|
934
|
+
self.metric_calculation.last_timestamp_when_has_task_in_queue = time.time()
|
|
935
|
+
return self.metric_calculation.msg_num_in_broker
|
|
965
936
|
|
|
966
937
|
@abc.abstractmethod
|
|
967
938
|
def _requeue(self, kw):
|
|
@@ -999,11 +970,11 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
999
970
|
|
|
1000
971
|
def pause_consume(self):
|
|
1001
972
|
"""从远程机器可以设置队列为暂停消费状态,funboost框架会自动停止消费,此功能需要配置好redis"""
|
|
1002
|
-
RedisMixin().redis_db_frame.
|
|
973
|
+
RedisMixin().redis_db_frame.hset(RedisKeys.REDIS_KEY_PAUSE_FLAG, self.queue_name,'1')
|
|
1003
974
|
|
|
1004
975
|
def continue_consume(self):
|
|
1005
976
|
"""从远程机器可以设置队列为暂停消费状态,funboost框架会自动继续消费,此功能需要配置好redis"""
|
|
1006
|
-
RedisMixin().redis_db_frame.
|
|
977
|
+
RedisMixin().redis_db_frame.hset(RedisKeys.REDIS_KEY_PAUSE_FLAG, self.queue_name,'0')
|
|
1007
978
|
|
|
1008
979
|
@decorators.FunctionResultCacher.cached_function_result_for_a_time(120)
|
|
1009
980
|
def _judge_is_daylight(self):
|
|
@@ -1027,9 +998,9 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
1027
998
|
no_task_time = 0
|
|
1028
999
|
while 1:
|
|
1029
1000
|
# noinspection PyBroadException
|
|
1030
|
-
message_count = self.
|
|
1001
|
+
message_count = self.metric_calculation.msg_num_in_broker
|
|
1031
1002
|
# print(message_count,self._last_execute_task_time,time.time() - self._last_execute_task_time,no_task_time)
|
|
1032
|
-
if message_count == 0 and self.
|
|
1003
|
+
if message_count == 0 and self.metric_calculation.last_execute_task_time != 0 and (time.time() - self.metric_calculation.last_execute_task_time) > minutes * 60:
|
|
1033
1004
|
no_task_time += 30
|
|
1034
1005
|
else:
|
|
1035
1006
|
no_task_time = 0
|
|
@@ -1150,6 +1121,85 @@ def wait_for_possible_has_finish_all_tasks_by_conusmer_list(consumer_list: typin
|
|
|
1150
1121
|
pool.submit(consumer.wait_for_possible_has_finish_all_tasks(minutes))
|
|
1151
1122
|
|
|
1152
1123
|
|
|
1124
|
+
class MetricCalculation:
|
|
1125
|
+
UNIT_TIME_FOR_COUNT = 10 # 这个不要随意改,需要其他地方配合,每隔多少秒计数,显示单位时间内执行多少次,暂时固定为10秒。
|
|
1126
|
+
|
|
1127
|
+
def __init__(self,conusmer:AbstractConsumer) -> None:
|
|
1128
|
+
self.consumer = conusmer
|
|
1129
|
+
|
|
1130
|
+
self.unit_time_for_count = self.UNIT_TIME_FOR_COUNT #
|
|
1131
|
+
self.execute_task_times_every_unit_time_temp = 0 # 每单位时间执行了多少次任务。
|
|
1132
|
+
self.execute_task_times_every_unit_time_temp_fail =0 # 每单位时间执行了多少次任务失败。
|
|
1133
|
+
self.current_time_for_execute_task_times_every_unit_time = time.time()
|
|
1134
|
+
self.consuming_function_cost_time_total_every_unit_time_tmp = 0
|
|
1135
|
+
self.last_execute_task_time = time.time() # 最近一次执行任务的时间。
|
|
1136
|
+
self.last_x_s_execute_count = 0
|
|
1137
|
+
self.last_x_s_execute_count_fail = 0
|
|
1138
|
+
self.last_x_s_avarage_function_spend_time = None
|
|
1139
|
+
self.last_show_remaining_execution_time = 0
|
|
1140
|
+
self.show_remaining_execution_time_interval = 300
|
|
1141
|
+
self.msg_num_in_broker = 0
|
|
1142
|
+
self.last_get_msg_num_ts = 0
|
|
1143
|
+
self.last_timestamp_when_has_task_in_queue = 0
|
|
1144
|
+
self.last_timestamp_print_msg_num = 0
|
|
1145
|
+
|
|
1146
|
+
self.total_consume_count_from_start =0
|
|
1147
|
+
self.total_consume_count_from_start_fail =0
|
|
1148
|
+
self.total_cost_time_from_start = 0 # 函数运行累计花费时间
|
|
1149
|
+
self.last_x_s_total_cost_time = None
|
|
1150
|
+
|
|
1151
|
+
def cal(self,t_start_run_fun:float,current_function_result_status:FunctionResultStatus):
|
|
1152
|
+
self.last_execute_task_time = time.time()
|
|
1153
|
+
current_msg_cost_time = time.time() - t_start_run_fun
|
|
1154
|
+
self.execute_task_times_every_unit_time_temp += 1
|
|
1155
|
+
self.total_consume_count_from_start +=1
|
|
1156
|
+
self.total_cost_time_from_start += current_msg_cost_time
|
|
1157
|
+
if current_function_result_status.success is False:
|
|
1158
|
+
self.execute_task_times_every_unit_time_temp_fail += 1
|
|
1159
|
+
self.total_consume_count_from_start_fail +=1
|
|
1160
|
+
self.consuming_function_cost_time_total_every_unit_time_tmp += current_msg_cost_time
|
|
1161
|
+
|
|
1162
|
+
if time.time() - self.current_time_for_execute_task_times_every_unit_time > self.unit_time_for_count:
|
|
1163
|
+
self.last_x_s_execute_count = self.execute_task_times_every_unit_time_temp
|
|
1164
|
+
self.last_x_s_execute_count_fail = self.execute_task_times_every_unit_time_temp_fail
|
|
1165
|
+
self.last_x_s_total_cost_time = self.consuming_function_cost_time_total_every_unit_time_tmp
|
|
1166
|
+
self.last_x_s_avarage_function_spend_time = round(self.last_x_s_total_cost_time / self.last_x_s_execute_count, 3)
|
|
1167
|
+
msg = f'{self.unit_time_for_count} 秒内执行了 {self.last_x_s_execute_count} 次函数 [ {self.consumer.consuming_function.__name__} ] ,' \
|
|
1168
|
+
f'失败了{self.last_x_s_execute_count_fail} 次,函数平均运行耗时 {self.last_x_s_avarage_function_spend_time} 秒。 '
|
|
1169
|
+
self.consumer.logger.info(msg)
|
|
1170
|
+
if time.time() - self.last_show_remaining_execution_time > self.show_remaining_execution_time_interval:
|
|
1171
|
+
self.msg_num_in_broker = self.consumer.publisher_of_same_queue.get_message_count()
|
|
1172
|
+
self.last_get_msg_num_ts = time.time()
|
|
1173
|
+
if self.msg_num_in_broker != -1: # 有的中间件无法统计或没实现统计队列剩余数量的,统一返回的是-1,不显示这句话。
|
|
1174
|
+
need_time = time_util.seconds_to_hour_minute_second(self.msg_num_in_broker / (self.execute_task_times_every_unit_time_temp / self.unit_time_for_count) /
|
|
1175
|
+
self.consumer._distributed_consumer_statistics.active_consumer_num)
|
|
1176
|
+
msg += f''' 预计还需要 {need_time} 时间 才能执行完成 队列 {self.consumer.queue_name} 中的 {self.msg_num_in_broker} 个剩余任务'''
|
|
1177
|
+
self.consumer.logger.info(msg)
|
|
1178
|
+
self.last_show_remaining_execution_time = time.time()
|
|
1179
|
+
self.current_time_for_execute_task_times_every_unit_time = time.time()
|
|
1180
|
+
self.consuming_function_cost_time_total_every_unit_time_tmp = 0
|
|
1181
|
+
self.execute_task_times_every_unit_time_temp = 0
|
|
1182
|
+
self.execute_task_times_every_unit_time_temp_fail = 0
|
|
1183
|
+
|
|
1184
|
+
def get_report_hearbeat_info(self) ->dict:
|
|
1185
|
+
return {
|
|
1186
|
+
'unit_time_for_count':self.unit_time_for_count,
|
|
1187
|
+
'last_x_s_execute_count':self.last_x_s_execute_count,
|
|
1188
|
+
'last_x_s_execute_count_fail':self.last_x_s_execute_count_fail,
|
|
1189
|
+
'last_execute_task_time':self.last_execute_task_time,
|
|
1190
|
+
'last_x_s_avarage_function_spend_time':self.last_x_s_avarage_function_spend_time,
|
|
1191
|
+
# 'last_show_remaining_execution_time':self.last_show_remaining_execution_time,
|
|
1192
|
+
'msg_num_in_broker':self.msg_num_in_broker,
|
|
1193
|
+
'current_time_for_execute_task_times_every_unit_time':self.current_time_for_execute_task_times_every_unit_time,
|
|
1194
|
+
'last_timestamp_when_has_task_in_queue':self.last_timestamp_when_has_task_in_queue,
|
|
1195
|
+
'total_consume_count_from_start':self.total_consume_count_from_start,
|
|
1196
|
+
'total_consume_count_from_start_fail':self.total_consume_count_from_start_fail,
|
|
1197
|
+
'total_cost_time_from_start':self.total_cost_time_from_start,
|
|
1198
|
+
'last_x_s_total_cost_time':self.last_x_s_total_cost_time,
|
|
1199
|
+
'avarage_function_spend_time_from_start':round(self.total_cost_time_from_start / self.total_consume_count_from_start,3) if self.total_consume_count_from_start else None,
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
|
|
1153
1203
|
class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
|
|
1154
1204
|
"""
|
|
1155
1205
|
为了兼容模拟mq的中间件(例如redis,他没有实现amqp协议,redis的list结构和真mq差远了),获取一个队列有几个连接活跃消费者数量。
|
|
@@ -1186,9 +1236,18 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
|
|
|
1186
1236
|
self._server__consumer_identification_map_key_name = f'funboost_hearbeat_server__dict:{nb_log_config_default.computer_ip}'
|
|
1187
1237
|
|
|
1188
1238
|
def run(self):
|
|
1239
|
+
self._send_consumer_params()
|
|
1189
1240
|
self.send_heartbeat()
|
|
1190
1241
|
self._consumer.keep_circulating(self.SEND_HEARTBEAT_INTERVAL, block=False, daemon=False)(self.send_heartbeat)()
|
|
1191
1242
|
|
|
1243
|
+
def _send_consumer_params(self):
|
|
1244
|
+
"""
|
|
1245
|
+
保存队列的消费者参数,以便在web界面查看。
|
|
1246
|
+
:return:
|
|
1247
|
+
"""
|
|
1248
|
+
self.redis_db_frame.hmset('funboost_queue__consumer_parmas',{self._consumer.queue_name: self._consumer.consumer_params.json_str_value()})
|
|
1249
|
+
|
|
1250
|
+
|
|
1192
1251
|
def _send_heartbeat_with_dict_value(self, redis_key, ):
|
|
1193
1252
|
# 发送当前消费者进程心跳的,值是字典,按一个机器或者一个队列运行了哪些进程。
|
|
1194
1253
|
|
|
@@ -1202,10 +1261,19 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
|
|
|
1202
1261
|
p.srem(redis_key, result)
|
|
1203
1262
|
self._consumer_identification_map['hearbeat_datetime_str'] = time_util.DatetimeConverter().datetime_str
|
|
1204
1263
|
self._consumer_identification_map['hearbeat_timestamp'] = self.timestamp()
|
|
1264
|
+
self._consumer_identification_map.update(self._consumer.metric_calculation.get_report_hearbeat_info())
|
|
1205
1265
|
value = Serialization.to_json_str(self._consumer_identification_map, )
|
|
1206
1266
|
p.sadd(redis_key, value)
|
|
1207
1267
|
p.execute()
|
|
1208
1268
|
|
|
1269
|
+
|
|
1270
|
+
def _send_msg_num(self):
|
|
1271
|
+
dic = {'msg_num_in_broker':self._consumer.metric_calculation.msg_num_in_broker,
|
|
1272
|
+
'last_get_msg_num_ts':self._consumer.metric_calculation.last_get_msg_num_ts,
|
|
1273
|
+
'report_ts':time.time(),
|
|
1274
|
+
}
|
|
1275
|
+
self.redis_db_frame.hset(RedisKeys.QUEUE__MSG_COUNT_MAP, self._consumer.queue_name, json.dumps(dic))
|
|
1276
|
+
|
|
1209
1277
|
def send_heartbeat(self):
|
|
1210
1278
|
# 根据队列名心跳的,值是字符串,方便值作为其他redis的键名
|
|
1211
1279
|
|
|
@@ -1222,6 +1290,7 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
|
|
|
1222
1290
|
self._send_heartbeat_with_dict_value(self._server__consumer_identification_map_key_name)
|
|
1223
1291
|
self._show_active_consumer_num()
|
|
1224
1292
|
self._get_stop_and_pause_flag_from_redis()
|
|
1293
|
+
self._send_msg_num()
|
|
1225
1294
|
|
|
1226
1295
|
def _show_active_consumer_num(self):
|
|
1227
1296
|
self.active_consumer_num = self.redis_db_frame.scard(self._redis_key_name) or 1
|
|
@@ -1237,13 +1306,13 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
|
|
|
1237
1306
|
|
|
1238
1307
|
# noinspection PyProtectedMember
|
|
1239
1308
|
def _get_stop_and_pause_flag_from_redis(self):
|
|
1240
|
-
stop_flag = self.redis_db_frame.
|
|
1309
|
+
stop_flag = self.redis_db_frame.hget(RedisKeys.REDIS_KEY_STOP_FLAG,self._consumer.queue_name)
|
|
1241
1310
|
if stop_flag is not None and int(stop_flag) == 1:
|
|
1242
1311
|
self._consumer._stop_flag = 1
|
|
1243
1312
|
else:
|
|
1244
1313
|
self._consumer._stop_flag = 0
|
|
1245
1314
|
|
|
1246
|
-
pause_flag = self.redis_db_frame.
|
|
1315
|
+
pause_flag = self.redis_db_frame.hget(RedisKeys.REDIS_KEY_PAUSE_FLAG,self._consumer.queue_name)
|
|
1247
1316
|
if pause_flag is not None and int(pause_flag) == 1:
|
|
1248
1317
|
self._consumer._pause_flag = 1
|
|
1249
1318
|
else:
|