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

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