funboost 49.6__tar.gz → 49.8__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-49.6/funboost.egg-info → funboost-49.8}/PKG-INFO +181 -100
- {funboost-49.6 → funboost-49.8}/README.md +92 -98
- {funboost-49.6 → funboost-49.8}/funboost/__init__.py +1 -1
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/async_pool_executor.py +16 -15
- {funboost-49.6 → funboost-49.8}/funboost/constant.py +19 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/base_consumer.py +30 -8
- {funboost-49.6 → funboost-49.8}/funboost/consumers/faststream_consumer.py +1 -1
- {funboost-49.6 → funboost-49.8}/funboost/consumers/http_consumer.py +12 -7
- {funboost-49.6 → funboost-49.8}/funboost/consumers/kafka_consumer_manually_commit.py +0 -2
- {funboost-49.6 → funboost-49.8}/funboost/consumers/tcp_consumer.py +11 -10
- {funboost-49.6 → funboost-49.8}/funboost/consumers/udp_consumer.py +9 -6
- {funboost-49.6 → funboost-49.8}/funboost/consumers/zeromq_consumer.py +18 -11
- {funboost-49.6 → funboost-49.8}/funboost/core/exceptions.py +7 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/func_params_model.py +18 -7
- {funboost-49.6 → funboost-49.8}/funboost/core/function_result_status_saver.py +15 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/msg_result_getter.py +51 -1
- funboost-49.8/funboost/core/serialization.py +43 -0
- {funboost-49.6 → funboost-49.8}/funboost/factories/consumer_factory.py +1 -1
- {funboost-49.6 → funboost-49.8}/funboost/factories/publisher_factotry.py +1 -1
- {funboost-49.6 → funboost-49.8}/funboost/funboost_config_deafult.py +2 -2
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/__pycache__/app.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/base_publisher.py +16 -2
- {funboost-49.6 → funboost-49.8}/funboost/publishers/http_publisher.py +7 -1
- {funboost-49.6 → funboost-49.8}/funboost/publishers/tcp_publisher.py +10 -8
- {funboost-49.6 → funboost-49.8}/funboost/publishers/udp_publisher.py +8 -6
- {funboost-49.6 → funboost-49.8}/funboost/publishers/zeromq_publisher.py +5 -1
- {funboost-49.6 → funboost-49.8}/funboost/timing_job/timing_push.py +3 -1
- {funboost-49.6 → funboost-49.8/funboost.egg-info}/PKG-INFO +181 -100
- {funboost-49.6 → funboost-49.8}/funboost.egg-info/requires.txt +1 -1
- {funboost-49.6 → funboost-49.8}/setup.py +1 -1
- funboost-49.6/funboost/core/serialization.py +0 -16
- {funboost-49.6 → funboost-49.8}/LICENSE +0 -0
- {funboost-49.6 → funboost-49.8}/MANIFEST.in +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/__init__old.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/__main__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/celery_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/dramatiq_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/faststream_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/huey_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/rocketry_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/rq_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/rq_windows_worker.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/assist/taskiq_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/async_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/backup/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/backup/grok_async_pool.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/base_pool_type.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/custom_threadpool_executor.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/pool_commons.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/concurrent_pool/single_thread_executor.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/celery_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/confirm_mixin.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/dramatiq_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/empty_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/http_consumer000.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/httpsqs_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/huey_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/kafka_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/kombu_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/local_python_queue_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/memory_deque_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/mongomq_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/mqtt_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/nameko_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/nats_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/nsq_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/peewee_conusmer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/persist_queue_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/pulsar_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_consumer_ack_able.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_consumer_ack_using_timeout.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_consumer_priority.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_consumer_simple.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_filter.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_pubsub_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/redis_stream_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/rocketmq_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/rq_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/sqlachemy_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/consumers/txt_file_consumer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/contrib/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/contrib/api_publish_msg.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/contrib/django_db_deco.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/contrib/queue2queue.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/active_cousumer_info_getter.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/booster.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/cli/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/cli/discovery_boosters.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/cli/funboost_fire.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/current_task.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/fabric_deploy_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/funboost_config_getter.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/funboost_time.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/function_result_status_config.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/helper_funs.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/kill_remote_task.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/lazy_impoter.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/loggers.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/muliti_process_enhance.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/core/task_id_logger.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/factories/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/__pycache__/app.cpython-313.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/__pycache__/functions.cpython-313.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/__pycache__/functions.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/app.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/app_debug_start.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/functions.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/assets/css/custom.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/assets/js/custom.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css/content_page_style.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css/style.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/css/font-awesome.min.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/FontAwesome.otf +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.eot +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.svg +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.ttf +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.woff +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/select2/4.0.13/css/select2.min.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/tabulator-tables@5.5.0/tabulator.min.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/tabulator-tables@5.5.0/tabulator_bootstrap3.min.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/css/bootstrap.min.css +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.svg +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/images/bg.jpg +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/images/favicon.ico +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/images/password.png +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/images/tick.png +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/images/user.png +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js/bootstrap-datetimepicker.min.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js/echarts.min.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js/form-memory.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js/moment-with-locales.min.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js/select2.min.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js_cdn/bootstrap/3.3.7/js/bootstrap.min.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js_cdn/chart.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/static/js_cdn/tabulator-tables@5.5.0/dist/js/tabulator.min.js +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/about.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/conusme_speed.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/fun_result_table.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/index.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/index_backup.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/login.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/queue_op.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/rpc_call.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/running_consumer_by_ip.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/function_result_web/templates/running_consumer_by_queue_name.html +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/celery_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/celery_publisher000.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/confluent_kafka_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/dramatiq_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/empty_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/faststream_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/httpsqs_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/huey_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/kafka_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/kombu_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/local_python_queue_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/meomory_deque_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/mongomq_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/mqtt_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/nameko_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/nats_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/nsq_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/peewee_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/persist_queue_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/pulsar_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/redis_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/redis_publisher_lpush.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/redis_publisher_priority.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/redis_publisher_simple.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/redis_pubsub_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/redis_stream_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/rocketmq_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/rq_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/sqla_queue_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/publishers/txt_file_publisher.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/queues/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/queues/memory_queues_map.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/queues/peewee_queue.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/queues/sqla_queue.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/set_frame_config.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/timing_job/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/timing_job/timing_job_base.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/apscheduler_monkey.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/block_exit.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/bulk_operation.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/class_utils.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/class_utils2.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/ctrl_c_end.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/custom_pysnooper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/decorators.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-313.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-313.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc2222.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/develop_log.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/expire_lock.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/func_timeout/StoppableThread.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/func_timeout/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/func_timeout/dafunc.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/func_timeout/exceptions.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/func_timeout/py2_raise.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/func_timeout/py3_raise.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/json_helper.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/mongo_util.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/monkey_color_log.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/monkey_patches.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/mqtt_util.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/paramiko_util.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/pysnooper_ydf/utils.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/pysnooper_ydf/variables.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/rabbitmq_factory.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/redis_manager.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/redis_manager_old.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/resource_monitoring.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/restart_python.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/simple_data_class.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/str_utils.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/time_util.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/times/__init__.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/times/version.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost/utils/un_strict_json_dumps.py +0 -0
- {funboost-49.6 → funboost-49.8}/funboost.egg-info/SOURCES.txt +0 -0
- {funboost-49.6 → funboost-49.8}/funboost.egg-info/dependency_links.txt +0 -0
- {funboost-49.6 → funboost-49.8}/funboost.egg-info/entry_points.txt +0 -0
- {funboost-49.6 → funboost-49.8}/funboost.egg-info/top_level.txt +0 -0
- {funboost-49.6 → funboost-49.8}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: funboost
|
|
3
|
-
Version: 49.
|
|
3
|
+
Version: 49.8
|
|
4
4
|
Summary: pip install funboost,python全功能分布式函数调度框架,funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,funboost web manager 方便查看和管理消费函数;99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
|
|
5
5
|
Home-page: https://github.com/ydf0509/funboost
|
|
6
6
|
Author: bfzs
|
|
@@ -28,27 +28,100 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
28
28
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
29
29
|
Classifier: Topic :: Software Development :: Libraries
|
|
30
30
|
Description-Content-Type: text/markdown
|
|
31
|
+
License-File: LICENSE
|
|
32
|
+
Requires-Dist: nb_log>=13.9
|
|
33
|
+
Requires-Dist: nb_libs>=1.9
|
|
34
|
+
Requires-Dist: nb_time>=2.4
|
|
35
|
+
Requires-Dist: pymongo>=4.6.3
|
|
36
|
+
Requires-Dist: AMQPStorm==2.10.6
|
|
37
|
+
Requires-Dist: rabbitpy==2.0.1
|
|
38
|
+
Requires-Dist: decorator==5.1.1
|
|
39
|
+
Requires-Dist: tomorrow3==1.1.0
|
|
40
|
+
Requires-Dist: persist-queue>=0.4.2
|
|
41
|
+
Requires-Dist: apscheduler<4.0.0,>=3.10.1
|
|
42
|
+
Requires-Dist: pikav0
|
|
43
|
+
Requires-Dist: pikav1
|
|
44
|
+
Requires-Dist: redis2
|
|
45
|
+
Requires-Dist: redis3
|
|
46
|
+
Requires-Dist: redis5
|
|
47
|
+
Requires-Dist: redis
|
|
48
|
+
Requires-Dist: setuptools_rust
|
|
49
|
+
Requires-Dist: fabric2>=2.6.0
|
|
50
|
+
Requires-Dist: nb_filelock
|
|
51
|
+
Requires-Dist: pysnooper
|
|
52
|
+
Requires-Dist: deprecated
|
|
53
|
+
Requires-Dist: cryptography
|
|
54
|
+
Requires-Dist: auto_run_on_remote
|
|
55
|
+
Requires-Dist: frozenlist
|
|
56
|
+
Requires-Dist: fire
|
|
57
|
+
Requires-Dist: pydantic
|
|
58
|
+
Requires-Dist: orjson
|
|
59
|
+
Requires-Dist: async-timeout
|
|
60
|
+
Requires-Dist: typing-extensions
|
|
31
61
|
Provides-Extra: all
|
|
32
|
-
|
|
62
|
+
Requires-Dist: confluent_kafka==1.7.0; extra == "all"
|
|
63
|
+
Requires-Dist: pulsar-client==3.1.0; python_version >= "3.7" and extra == "all"
|
|
64
|
+
Requires-Dist: celery; extra == "all"
|
|
65
|
+
Requires-Dist: flower; extra == "all"
|
|
66
|
+
Requires-Dist: nameko==2.14.1; extra == "all"
|
|
67
|
+
Requires-Dist: sqlalchemy==1.4.13; extra == "all"
|
|
68
|
+
Requires-Dist: sqlalchemy_utils==0.36.1; extra == "all"
|
|
69
|
+
Requires-Dist: dramatiq==1.14.2; extra == "all"
|
|
70
|
+
Requires-Dist: huey==2.4.5; extra == "all"
|
|
71
|
+
Requires-Dist: rq==1.15.0; extra == "all"
|
|
72
|
+
Requires-Dist: kombu; 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: eventlet==0.33.3; extra == "all"
|
|
85
|
+
Requires-Dist: gevent==22.10.2; extra == "all"
|
|
86
|
+
Requires-Dist: flask; extra == "all"
|
|
87
|
+
Requires-Dist: flask_bootstrap; extra == "all"
|
|
88
|
+
Requires-Dist: flask_wtf; extra == "all"
|
|
89
|
+
Requires-Dist: wtforms; extra == "all"
|
|
90
|
+
Requires-Dist: flask_login; extra == "all"
|
|
91
|
+
Provides-Extra: extra-brokers
|
|
92
|
+
Requires-Dist: confluent_kafka==1.7.0; extra == "extra-brokers"
|
|
93
|
+
Requires-Dist: pulsar-client==3.1.0; python_version >= "3.7" and extra == "extra-brokers"
|
|
94
|
+
Requires-Dist: celery; extra == "extra-brokers"
|
|
95
|
+
Requires-Dist: flower; extra == "extra-brokers"
|
|
96
|
+
Requires-Dist: nameko==2.14.1; extra == "extra-brokers"
|
|
97
|
+
Requires-Dist: sqlalchemy==1.4.13; extra == "extra-brokers"
|
|
98
|
+
Requires-Dist: sqlalchemy_utils==0.36.1; extra == "extra-brokers"
|
|
99
|
+
Requires-Dist: dramatiq==1.14.2; extra == "extra-brokers"
|
|
100
|
+
Requires-Dist: huey==2.4.5; extra == "extra-brokers"
|
|
101
|
+
Requires-Dist: rq==1.15.0; extra == "extra-brokers"
|
|
102
|
+
Requires-Dist: kombu; 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"
|
|
114
|
+
Requires-Dist: eventlet==0.33.3; extra == "extra-brokers"
|
|
115
|
+
Requires-Dist: gevent==22.10.2; extra == "extra-brokers"
|
|
33
116
|
Provides-Extra: flask
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
117
|
+
Requires-Dist: flask; extra == "flask"
|
|
118
|
+
Requires-Dist: flask_bootstrap; extra == "flask"
|
|
119
|
+
Requires-Dist: flask_wtf; extra == "flask"
|
|
120
|
+
Requires-Dist: wtforms; extra == "flask"
|
|
121
|
+
Requires-Dist: flask_login; extra == "flask"
|
|
37
122
|
|
|
38
123
|
# 1.python万能分布式函数调度框架简funboost简介
|
|
39
124
|
|
|
40
|
-
[//]: # (Stargazers:)
|
|
41
|
-
|
|
42
|
-
[//]: # ()
|
|
43
|
-
[//]: # ([](https://github.com/ydf0509/funboost/stargazers))
|
|
44
|
-
|
|
45
|
-
[//]: # ()
|
|
46
|
-
[//]: # (Forkers:)
|
|
47
|
-
|
|
48
|
-
[//]: # ()
|
|
49
|
-
[//]: # ([](https://github.com/ydf0509/funboost/network/members))
|
|
50
|
-
|
|
51
|
-
|
|
52
125
|
<pre style="color: greenyellow;background-color: #0c1119; font-size: medium;">
|
|
53
126
|
pip install funboost ,python全功能分布式函数调度框架。 demo用法例子见文档1.3
|
|
54
127
|
|
|
@@ -104,14 +177,13 @@ funboost只有一个@boost装饰器,@boost入参能自动补全,更重要的
|
|
|
104
177
|
因为funboost非常注重代码补全提示,所以不存在上面celery的那些复杂高难度缺点。
|
|
105
178
|
```
|
|
106
179
|
|
|
107
|
-
|
|
108
180
|
funboost的旧框架名字是function_scheduling_distributed_framework , 关系和兼容性见1.0.3介绍。
|
|
109
181
|
旧框架地址: [https://github.com/ydf0509/distributed_framework](https://github.com/ydf0509/distributed_framework)
|
|
110
182
|
|
|
111
|
-
|
|
112
183
|
## 1.0 github地址和文档地址
|
|
113
184
|
|
|
114
185
|
### 1.0.1 [分布式函数调度框架文档地址 ](https://funboost.readthedocs.io/zh-cn/latest/index.html)
|
|
186
|
+
|
|
115
187
|
[查看分布式函数调度框架文档 https://funboost.readthedocs.io/zh-cn/latest/index.html](https://funboost.readthedocs.io/zh-cn/latest/index.html)
|
|
116
188
|
|
|
117
189
|
文档很长,大部分都是讲原理和对比各种框架。但是用户只需要学习1.3这1个例子就能掌握了。因为其他例子只是 @boost的 BoosterParams 里面的控制入参换了一下。
|
|
@@ -121,6 +193,7 @@ funboost的旧框架名字是function_scheduling_distributed_framework , 关系
|
|
|
121
193
|
funboost 框架和一般的框架不一样,因为只有一行代码需要掌握,绝对不是要求用户先精通框架本身才能自由发挥。
|
|
122
194
|
|
|
123
195
|
#### [1.python万能分布式函数调度框架简funboost简介](https://funboost.readthedocs.io/zh-cn/latest/articles/c1.html)
|
|
196
|
+
|
|
124
197
|
#### [2. funboost对比celery框架](https://funboost.readthedocs.io/zh-cn/latest/articles/c2.html)
|
|
125
198
|
|
|
126
199
|
#### [3.funboost框架详细介绍](https://funboost.readthedocs.io/zh-cn/latest/articles/c3.html)
|
|
@@ -147,7 +220,6 @@ funboost 框架和一般的框架不一样,因为只有一行代码需要掌
|
|
|
147
220
|
|
|
148
221
|
#### [13.启动 funboost web manager,查看消费结果和队列管理](https://funboost.readthedocs.io/zh-cn/latest/articles/c13.html)
|
|
149
222
|
|
|
150
|
-
|
|
151
223
|
#### [funboost依赖的nb_log日志文档 https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2](https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2)
|
|
152
224
|
|
|
153
225
|
```
|
|
@@ -163,14 +235,8 @@ funboost 框架和一般的框架不一样,因为只有一行代码需要掌
|
|
|
163
235
|
```
|
|
164
236
|
|
|
165
237
|
### 1.0.2 [分布式函数调度框架github地址](https://github.com/ydf0509/funboost)
|
|
166
|
-
[查看分布式函数调度框架github项目](https://github.com/ydf0509/funboost)
|
|
167
|
-
|
|
168
|
-
[//]: # (### 1.0.3 [分布式函数调度框架qq群](https://qm.qq.com/cgi-bin/qm/qr?k=unA_o_L3sv5yushJzYGUTAwSzZ7GhUhq&jump_from=webapi))
|
|
169
|
-
|
|
170
|
-
[//]: # (现在新建一个qq群 189603256)
|
|
171
|
-
|
|
172
|
-
[//]:# ([点击加入 python万能分布式函数调度框架qq群](https://qm.qq.com/cgi-bin/qm/qr?k=unA_o_L3sv5yushJzYGUTAwSzZ7GhUhq&jump_from=webapi))
|
|
173
238
|
|
|
239
|
+
[查看分布式函数调度框架github项目](https://github.com/ydf0509/funboost)
|
|
174
240
|
|
|
175
241
|
### 1.0.3 funboost 框架 和 function_scheduling_distributed_framework 框架 关系说明
|
|
176
242
|
|
|
@@ -178,10 +244,7 @@ funboost 框架和一般的框架不一样,因为只有一行代码需要掌
|
|
|
178
244
|
funboost 是 function_scheduling_distributed_framework的包名更新版本
|
|
179
245
|
```
|
|
180
246
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
<span style="font-size:15px">旧框架地址:<span><a href="https://github.com/ydf0509/distributed_framework" style="font-size: 15px">function_scheduling_distributed_framework框架地址链接</a>
|
|
184
|
-
|
|
247
|
+
`<span style="font-size:15px">`旧框架地址:`<span><a href="https://github.com/ydf0509/distributed_framework" style="font-size: 15px">`function_scheduling_distributed_framework框架地址链接 `</a>`
|
|
185
248
|
|
|
186
249
|
## 1.1 安装方式
|
|
187
250
|
|
|
@@ -193,39 +256,26 @@ pip install funboost --upgrade
|
|
|
193
256
|
|
|
194
257
|
## 1.2 框架功能介绍
|
|
195
258
|
|
|
196
|
-
分布式函数调度框架,支持5种并发模式,30+种消息中间件,30
|
|
259
|
+
分布式函数调度框架,支持5种并发模式,30+种消息中间件,30种任务控制功能。`<br>`
|
|
197
260
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
198
261
|
|
|
199
262
|
有了这个框架,用户再也无需亲自手写操作进程、线程、协程的并发的代码了。
|
|
200
263
|
|
|
201
264
|
有了这个框架,用户再也无需亲自手写操作redis rabbitmq socket kafka celery nameko了。
|
|
202
265
|
|
|
203
|
-
[//]: # ([](https://imgtu.com/i/sgV2xP))
|
|
204
|
-
|
|
205
|
-
[//]: # ()
|
|
206
|
-
[//]: # ([img-46.png](https://postimg.cc/hfW0VhCX))
|
|
207
|
-
|
|
208
266
|
funboost示图:
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
[//]: # ([](https://postimg.cc/hfW0VhCX))
|
|
212
|
-
|
|
213
|
-
[//]: # (就是最普通的生产者消费者流程图)
|
|
214
|
-
|
|
215
|
-
[//]: # ()
|
|
267
|
+
`<a href="https://imgse.com/i/pkFFghj"><img src="https://s21.ax1x.com/2024/04/29/pkFFghj.png" alt="pkFFghj.png" border="0" />``</a>`
|
|
216
268
|
|
|
217
269
|
也就是这种非常普通的流程图,一样的意思
|
|
218
270
|
|
|
219
|
-
|
|
271
|
+
`<a href="https://imgse.com/i/pkFFcNQ"><img src="https://s21.ax1x.com/2024/04/29/pkFFcNQ.png" alt="pkFFcNQ.png" border="0" />``</a>`
|
|
220
272
|
|
|
221
273
|
### 1.2.1 框架支持5种并发模式
|
|
222
274
|
|
|
223
|
-
<div style=" font-size: xx-large; font-family: 黑体,serif; "> threading <span style="font-size: medium">(使用的是可变线程池,可以智能自动缩小和扩大线程数量,也可以运行async def的函数) </span> </div>
|
|
224
|
-
|
|
275
|
+
<div style=" font-size: xx-large; font-family: 黑体,serif; "> threading <span style="font-size: medium">(使用的是可变线程池,可以智能自动缩小和扩大线程数量,也可以运行async def的函数) </span> </div>
|
|
225
276
|
|
|
226
277
|
<div style=" font-size: xx-large; font-family: 黑体,serif; "> gevent </div>
|
|
227
278
|
|
|
228
|
-
|
|
229
279
|
<div style="font-size: xx-large; font-family: 黑体,serif; "> eventlet </div>
|
|
230
280
|
|
|
231
281
|
<div style="font-size: xx-large; font-family: 黑体,serif; "> asyncio <span style="font-size: medium">(框架可以直接支持async 定义的携程函数作为任务,celery不支持) </span> </div>
|
|
@@ -247,6 +297,7 @@ funboost示图:
|
|
|
247
297
|
以下两种方式,都是10线程加python内存queue方式运行f函数,有了此框架,用户无需代码手写手动操作线程 协程 asyncio 进程 来并发。
|
|
248
298
|
|
|
249
299
|
1)手动开启线程池方式
|
|
300
|
+
|
|
250
301
|
```python
|
|
251
302
|
import time
|
|
252
303
|
from concurrent.futures import ThreadPoolExecutor
|
|
@@ -266,6 +317,7 @@ if __name__ == '__main__':
|
|
|
266
317
|
```
|
|
267
318
|
|
|
268
319
|
2)funboost 使用内存队列,设置10线程并发
|
|
320
|
+
|
|
269
321
|
```python
|
|
270
322
|
import time
|
|
271
323
|
from funboost import BoosterParams, BrokerEnum
|
|
@@ -284,17 +336,15 @@ if __name__ == '__main__':
|
|
|
284
336
|
|
|
285
337
|
```
|
|
286
338
|
|
|
287
|
-
|
|
288
339
|
### 1.2.2 框架支持30种中间件或三方框架
|
|
289
340
|
|
|
290
341
|
框架支持 rabbitmq redis python自带的queue.Queue sqlite sqlachemy kafka pulsar mongodb 直接socket celery nameko 等作为消息中间件。
|
|
291
342
|
|
|
292
343
|
同时此框架也支持操作 kombu 库作为中间件,所以此框架能够支持的中间件类型只会比celery更多。
|
|
293
344
|
|
|
294
|
-
框架支持的中间件种类大全和选型见文档3.1章节的介绍:
|
|
295
|
-
|
|
296
|
-
[3.1 各种中间件选择的场景和优势](https://funboost.readthedocs.io/zh-cn/latest/articles/c3.html#id2)
|
|
345
|
+
框架支持的中间件种类大全和选型见文档3.1章节的介绍:
|
|
297
346
|
|
|
347
|
+
[3.1 各种中间件选择的场景和优势](https://funboost.readthedocs.io/zh-cn/latest/articles/c3.html#id2)
|
|
298
348
|
|
|
299
349
|
### 1.2.3 框架对任务支持30种控制功能。
|
|
300
350
|
|
|
@@ -316,6 +366,7 @@ python通用分布式函数调度框架。适用场景范围广泛, 框架非
|
|
|
316
366
|
</pre>
|
|
317
367
|
|
|
318
368
|
20种控制功能包括:
|
|
369
|
+
|
|
319
370
|
<pre style="color: #A0A000">
|
|
320
371
|
分布式:
|
|
321
372
|
支持数十种最负盛名的消息中间件.(除了常规mq,还包括用不同形式的如 数据库 磁盘文件 redis等来模拟消息队列)
|
|
@@ -323,16 +374,16 @@ python通用分布式函数调度框架。适用场景范围广泛, 框架非
|
|
|
323
374
|
并发:
|
|
324
375
|
支持threading gevent eventlet asyncio 单线程 5种并发模式 叠加 多进程。
|
|
325
376
|
多进程不是和前面四种模式平行的,是叠加的,例如可以是 多进程 + 协程,多进程 + 多线程。
|
|
326
|
-
|
|
377
|
+
|
|
327
378
|
控频限流:
|
|
328
379
|
例如十分精确的指定1秒钟运行30次函数或者0.02次函数(无论函数需要随机运行多久时间,都能精确控制到指定的消费频率;
|
|
329
|
-
|
|
380
|
+
|
|
330
381
|
分布式控频限流:
|
|
331
382
|
例如一个脚本反复启动多次或者多台机器多个容器在运行,如果要严格控制总的qps,能够支持分布式控频限流。
|
|
332
|
-
|
|
383
|
+
|
|
333
384
|
任务持久化:
|
|
334
385
|
消息队列中间件天然支持
|
|
335
|
-
|
|
386
|
+
|
|
336
387
|
断点接续运行:
|
|
337
388
|
无惧反复重启代码,造成任务丢失。消息队列的持久化 + 消费确认机制 做到不丢失一个消息
|
|
338
389
|
(此框架很重视消息的万无一失,就是执行函数的机器支持在任何时候随时肆无忌惮反复粗暴拉电闸断电,或者强制硬关机,
|
|
@@ -343,64 +394,64 @@ python通用分布式函数调度框架。适用场景范围广泛, 框架非
|
|
|
343
394
|
分布式函数调度框架的消费确认机制,保证函数运行完了才确认消费,正在运行突然强制关闭进程不会丢失一个消息,
|
|
344
395
|
下次启动还会消费或者被别的机器消费。
|
|
345
396
|
此框架的消息万无一失特性,不仅支持rabbbitmq因为原生支持,也支持redis,框架对redis的实现机制是因为客户端加了一层保障)。
|
|
346
|
-
|
|
397
|
+
|
|
347
398
|
定时:
|
|
348
399
|
可以按时间间隔、按指定时间执行一次、按指定时间执行多次,使用的是apscheduler包的方式。
|
|
349
|
-
|
|
400
|
+
|
|
350
401
|
延时任务:
|
|
351
402
|
例如规定任务发布后,延迟60秒执行,或者规定18点执行。这个概念和定时任务有一些不同。
|
|
352
|
-
|
|
403
|
+
|
|
353
404
|
指定时间不运行:
|
|
354
405
|
例如,有些任务你不想在白天运行,可以只在晚上的时间段运行
|
|
355
|
-
|
|
406
|
+
|
|
356
407
|
消费确认:
|
|
357
408
|
这是最为重要的一项功能之一,有了这才能肆无忌惮的任性反复重启代码也不会丢失一个任务。
|
|
358
409
|
(常规的手写 redis.lpush + redis.blpop,然后并发的运行取出来的消息,随意关闭重启代码瞬间会丢失大量任务,
|
|
359
410
|
那种有限的 断点接续 完全不可靠,根本不敢随意重启代码)
|
|
360
|
-
|
|
411
|
+
|
|
361
412
|
立即重试指定次数:
|
|
362
413
|
当函数运行出错,会立即重试指定的次数,达到最大次重试数后就确认消费了
|
|
363
|
-
|
|
414
|
+
|
|
364
415
|
重新入队:
|
|
365
416
|
在消费函数内部主动抛出一个特定类型的异常ExceptionForRequeue后,消息重新返回消息队列
|
|
366
|
-
|
|
417
|
+
|
|
367
418
|
超时杀死:
|
|
368
419
|
例如在函数运行时间超过10秒时候,将此运行中的函数kill
|
|
369
|
-
|
|
420
|
+
|
|
370
421
|
计算消费次数速度:
|
|
371
422
|
实时计算单个进程1分钟的消费次数,在日志中显示;当开启函数状态持久化后可在web页面查看消费次数
|
|
372
|
-
|
|
423
|
+
|
|
373
424
|
预估消费时间:
|
|
374
425
|
根据前1分钟的消费次数,按照队列剩余的消息数量来估算剩余的所需时间
|
|
375
|
-
|
|
426
|
+
|
|
376
427
|
函数运行日志记录:
|
|
377
428
|
使用自己设计开发的 控制台五彩日志(根据日志严重级别显示成五种颜色;使用了可跳转点击日志模板)
|
|
378
429
|
+ 多进程安全切片的文件日志 + 可选的kafka elastic日志
|
|
379
|
-
|
|
430
|
+
|
|
380
431
|
任务过滤:
|
|
381
432
|
例如求和的add函数,已经计算了1 + 2,再次发布1 + 2的任务到消息中间件,可以让框架跳过执行此任务。
|
|
382
433
|
任务过滤的原理是使用的是函数入参判断是否是已近执行过来进行过滤。
|
|
383
|
-
|
|
434
|
+
|
|
384
435
|
任务过滤有效期缓存:
|
|
385
436
|
例如查询深圳明天的天气,可以设置任务过滤缓存30分钟,30分钟内查询过深圳的天气,则不再查询。
|
|
386
437
|
30分钟以外无论是否查询过深圳明天的天气,则执行查询。
|
|
387
|
-
|
|
438
|
+
|
|
388
439
|
任务过期丢弃:
|
|
389
440
|
例如消息是15秒之前发布的,可以让框架丢弃此消息不执行,防止消息堆积,
|
|
390
441
|
在消息可靠性要求不高但实时性要求高的高并发互联网接口中使用
|
|
391
|
-
|
|
442
|
+
|
|
392
443
|
函数状态和结果持久化:
|
|
393
444
|
可以分别选择函数状态和函数结果持久化到mongodb,使用的是短时间内的离散mongo任务自动聚合成批量
|
|
394
445
|
任务后批量插入,尽可能的减少了插入次数
|
|
395
|
-
|
|
446
|
+
|
|
396
447
|
消费状态实时可视化:
|
|
397
448
|
在页面上按时间倒序实时刷新函数消费状态,包括是否成功 出错的异常类型和异常提示
|
|
398
449
|
重试运行次数 执行函数的机器名字+进程id+python脚本名字 函数入参 函数结果 函数运行消耗时间等
|
|
399
|
-
|
|
450
|
+
|
|
400
451
|
消费次数和速度生成统计表可视化:
|
|
401
452
|
生成echarts统计图,主要是统计最近60秒每秒的消费次数、最近60分钟每分钟的消费次数
|
|
402
453
|
最近24小时每小时的消费次数、最近10天每天的消费次数
|
|
403
|
-
|
|
454
|
+
|
|
404
455
|
rpc:
|
|
405
456
|
生产端(或叫发布端)获取消费结果。各个发布端对消费结果进行不同步骤的后续处理更灵活,而不是让消费端对消息的处理一干到底。
|
|
406
457
|
|
|
@@ -416,7 +467,7 @@ python通用分布式函数调度框架。适用场景范围广泛, 框架非
|
|
|
416
467
|
|
|
417
468
|
远程杀死(取消)任务:
|
|
418
469
|
支持在发布端杀死正在运行的消息,发送杀死命令时候对还未取出的消息则放弃运行消息。
|
|
419
|
-
|
|
470
|
+
|
|
420
471
|
funboost支持命令行操作:
|
|
421
472
|
使用fire实现的命令行,见文档第12章
|
|
422
473
|
|
|
@@ -425,15 +476,14 @@ python通用分布式函数调度框架。适用场景范围广泛, 框架非
|
|
|
425
476
|
|
|
426
477
|
</pre>
|
|
427
478
|
|
|
428
|
-
|
|
429
479
|
关于稳定性和性能,一句话概括就是直面百万c端用户(包括app和小程序), 已经连续超过三个季度稳定高效运行无事故,从没有出现过假死、崩溃、内存泄漏等问题。 windows和linux行为100%一致,不会像celery一样,相同代码前提下,很多功能在win上不能运行或出错。
|
|
430
480
|
|
|
431
|
-
|
|
432
481
|
## 1.3 框架使用例子
|
|
433
482
|
|
|
434
483
|
使用之前先学习 PYTHONPATH的概念 [https://github.com/ydf0509/pythonpathdemo](https://github.com/ydf0509/pythonpathdemo)
|
|
435
484
|
|
|
436
485
|
win cmd和linux 运行时候,设置 PYTHONPATH 为项目根目录,是为了自动生成或读取到项目根目录下的 funboost_config.py文件作为配置。
|
|
486
|
+
|
|
437
487
|
```
|
|
438
488
|
以下这只是简单求和例子,实际情况换成任意函数里面写任意逻辑,框架可没有规定只能用于 求和函数 的自动调度并发。
|
|
439
489
|
而是根据实际情况函数的参数个数、函数的内部逻辑功能,全部都由用户自定义,函数里面想写什么就写什么,想干什么就干什么,极端自由。
|
|
@@ -443,6 +493,8 @@ win cmd和linux 运行时候,设置 PYTHONPATH 为项目根目录,是为了
|
|
|
443
493
|
有一点要说明的是框架的消息中间件的ip 端口 密码 等配置是在你第一次运行代码时候,在你当前项目的根目录下生成的 funboost_config.py 按需设置。
|
|
444
494
|
```
|
|
445
495
|
|
|
496
|
+
### 1.3.1 funboost最简单例子
|
|
497
|
+
|
|
446
498
|
```python
|
|
447
499
|
import time
|
|
448
500
|
from funboost import boost, BrokerEnum,BoosterParams
|
|
@@ -482,14 +534,11 @@ if __name__ == "__main__":
|
|
|
482
534
|
|
|
483
535
|
控制台运行截图:
|
|
484
536
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
<a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
|
|
537
|
+
`<a href="https://imgse.com/i/pkFkP4H"><img src="https://s21.ax1x.com/2024/04/29/pkFkP4H.png" alt="pkFkP4H.png" border="0" />``</a>`
|
|
489
538
|
|
|
539
|
+
`<a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" />``</a>`
|
|
490
540
|
|
|
491
|
-
|
|
492
|
-
## 1.3.2 funboost集中演示一个功能更多的综合例子
|
|
541
|
+
### 1.3.2 funboost集中演示一个功能更多的综合例子
|
|
493
542
|
|
|
494
543
|
```python
|
|
495
544
|
|
|
@@ -510,7 +559,7 @@ class MyBoosterParams(BoosterParams): # 自定义的参数类,继承BoosterPa
|
|
|
510
559
|
max_retry_times: int = 3
|
|
511
560
|
concurrent_mode: str = ConcurrentModeEnum.THREADING
|
|
512
561
|
|
|
513
|
-
|
|
562
|
+
|
|
514
563
|
@boost(MyBoosterParams(queue_name='s1_queue', qps=1,
|
|
515
564
|
# do_task_filtering=True, # 可开启任务过滤,防止重复入参消费。
|
|
516
565
|
is_using_rpc_mode=True, # 开启rpc模式,支持rpc获取结果
|
|
@@ -547,8 +596,8 @@ if __name__ == '__main__':
|
|
|
547
596
|
for i in range(100):
|
|
548
597
|
step1.push(i,i*2) # 向 step1函数的队列发送消息,入参和手动调用函数那样很相似。
|
|
549
598
|
step1.publish ({'a':i,'b':i*2},task_id=f'task_{i}') # publish 第一个入参是字典,比push能传递更多funboost的辅助参数,类似celery的apply_async和delay的关系。一个简单,一个复杂但强大。
|
|
550
|
-
|
|
551
|
-
|
|
599
|
+
|
|
600
|
+
|
|
552
601
|
|
|
553
602
|
"""
|
|
554
603
|
1.funboost 使用 ApsJobAdder.add_push_job来添加定时任务,不是add_job。
|
|
@@ -558,7 +607,10 @@ if __name__ == '__main__':
|
|
|
558
607
|
|
|
559
608
|
下面是三种方式添加定时任务,这些定时方式都是知名apscheduler包的定时方式,和funboost没关系。
|
|
560
609
|
"""
|
|
561
|
-
|
|
610
|
+
|
|
611
|
+
# ApsJobAdder 类可以多次重复实例化,内部对每一个消费函数使用一个单独的apscheduler对象,避免扫描与当前关心的消费函数不相干的redis jobstore中的定时任务
|
|
612
|
+
|
|
613
|
+
# 方式1:指定日期执行一次
|
|
562
614
|
ApsJobAdder(step2,
|
|
563
615
|
job_store_kind='redis', # 使用reids作为 apscheduler的 jobstrores
|
|
564
616
|
is_auto_start=True, # 添加任务,并同时顺便启动了定时器 执行了apscheduler对象.start()
|
|
@@ -589,10 +641,29 @@ if __name__ == '__main__':
|
|
|
589
641
|
kwargs={"c": 50, "d": 60,"e":70},
|
|
590
642
|
replace_existing=True,
|
|
591
643
|
id='cron_job1')
|
|
592
|
-
|
|
644
|
+
|
|
593
645
|
ctrl_c_recv() # 用于阻塞代码,阻止主线程退出,使主线程永久运行。 相当于 你在代码最末尾,加了个 while 1:time.sleep(10),使主线程永不结束。apscheduler background定时器守护线程需要这样保持定时器不退出。
|
|
594
646
|
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
### 1.3.3 funboost的 @BoosterParams(...) 和 @boost(BoosterParams(...)) 等效
|
|
650
|
+
|
|
651
|
+
通常代码例子是:
|
|
595
652
|
|
|
653
|
+
```python
|
|
654
|
+
@boost(BoosterParams(queue_name="task_queue_consume_any_msg"))
|
|
655
|
+
def task_fun(a: int, b: int):
|
|
656
|
+
print(f'a:{a},b:{b}')
|
|
657
|
+
return a + b
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
但如果你追求极致简化,也可以写成如下,不要@boost,直接@BoosterParams
|
|
661
|
+
|
|
662
|
+
```python
|
|
663
|
+
@BoosterParams(queue_name="task_queue_consume_any_msg")
|
|
664
|
+
def task_fun(a: int, b: int):
|
|
665
|
+
print(f'a:{a},b:{b}')
|
|
666
|
+
return a + b
|
|
596
667
|
```
|
|
597
668
|
|
|
598
669
|
## funboost web manager 截图:
|
|
@@ -606,9 +677,10 @@ if __name__ == '__main__':
|
|
|
606
677
|
运行中消费者 by ip: 根据ip搜索有哪些消费者
|
|
607
678
|
[](https://imgse.com/i/pEJCRFx)
|
|
608
679
|
|
|
609
|
-
|
|
610
680
|
队列操作:查看和操作队列,包括 清空清空 暂停消费 恢复消费 调整qps和并发
|
|
681
|
+
|
|
611
682
|
<!-- [](https://imgse.com/i/pEJC6m9) -->
|
|
683
|
+
|
|
612
684
|
[](https://imgse.com/i/pVSOJcq)
|
|
613
685
|
|
|
614
686
|
队列操作,查看消费者详情:查看队列的所有消费者详情
|
|
@@ -618,10 +690,10 @@ if __name__ == '__main__':
|
|
|
618
690
|
[](https://imgse.com/i/pVpr7sP)
|
|
619
691
|
|
|
620
692
|
rpc调用:在网页上对30种消息队列发布消息并获取消息的函数执行结;根据taskid获取结果。
|
|
621
|
-
<!-- [](https://imgse.com/i/pETq8hj) -->
|
|
622
|
-
[](https://imgse.com/i/pE7y8oT)
|
|
623
693
|
|
|
694
|
+
<!-- [](https://imgse.com/i/pETq8hj) -->
|
|
624
695
|
|
|
696
|
+
[](https://imgse.com/i/pE7y8oT)
|
|
625
697
|
|
|
626
698
|
## 1.4 python分布式函数执行为什么重要?
|
|
627
699
|
|
|
@@ -640,7 +712,7 @@ python比其他语言更需要分布式函数调度框架来执行函数,有
|
|
|
640
712
|
那么就不光是需要跨进程执行任务了,例如跨pvm解释器启动脚本共享任务(即使是同一个机器,把python xx.py连续启动多次)、
|
|
641
713
|
跨docker容器、跨物理机共享任务。只有让python跑在更多进程的cpu核心 跑在更多的docker容器 跑在更多的物理机上,
|
|
642
714
|
python才能获得与其他语言只需要一台机器就实现的执行速度。分布式函数调度框架来驱动函数执行针对这些不同的场景,
|
|
643
|
-
|
|
715
|
+
用代码不需要做任何变化。
|
|
644
716
|
|
|
645
717
|
所以比其他语言来说,python是更需要分布式函数调度框架来执行任务。
|
|
646
718
|
|
|
@@ -658,6 +730,7 @@ python比其他语言更需要分布式函数调度框架来执行函数,有
|
|
|
658
730
|
```
|
|
659
731
|
|
|
660
732
|
## 1.6 funboost支持支持celery框架整体作为funboost的broker (2023.4新增)
|
|
733
|
+
|
|
661
734
|
```
|
|
662
735
|
见11.1章节代码例子,celery框架整体作为funboost的broker,funboost的发布和消费将只作为极简api,
|
|
663
736
|
核心的消费调度和发布和定时功能,都是由celery框架来完成,funboost框架的发布和调度代码不实际起作用。
|
|
@@ -678,15 +751,23 @@ funboost通过支持celery作为broker_kind,使celer框架变成了funboost的
|
|
|
678
751
|
|
|
679
752
|
[查看分布式函数调度框架完整文档](https://funboost.readthedocs.io/)
|
|
680
753
|
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
754
|

|
|
691
755
|
|
|
692
756
|
<div> </div>
|
|
757
|
+
|
|
758
|
+
[//]: #
|
|
759
|
+
[//]: #
|
|
760
|
+
[//]: #
|
|
761
|
+
[//]: #
|
|
762
|
+
[//]: #
|
|
763
|
+
[//]: #
|
|
764
|
+
[//]: #
|
|
765
|
+
[//]: #
|
|
766
|
+
[//]: #
|
|
767
|
+
[//]: #
|
|
768
|
+
[//]: #
|
|
769
|
+
[//]: #
|
|
770
|
+
[//]: #
|
|
771
|
+
[//]: #
|
|
772
|
+
[//]: #
|
|
773
|
+
[//]: #
|