funboost 44.3__tar.gz → 44.4__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-44.3/funboost.egg-info → funboost-44.4}/PKG-INFO +4 -3
- {funboost-44.3 → funboost-44.4}/README.md +3 -2
- {funboost-44.3 → funboost-44.4}/funboost/__init__.py +1 -1
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/async_helper.py +3 -1
- {funboost-44.3 → funboost-44.4}/funboost/consumers/base_consumer.py +19 -19
- {funboost-44.3 → funboost-44.4}/funboost/core/booster.py +17 -2
- funboost-44.4/funboost/core/funboost_time.py +45 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/helper_funs.py +16 -2
- {funboost-44.3 → funboost-44.4}/funboost/core/lazy_impoter.py +1 -1
- {funboost-44.3 → funboost-44.4}/funboost/core/loggers.py +3 -3
- {funboost-44.3 → funboost-44.4}/funboost/funboost_config_deafult.py +1 -1
- {funboost-44.3 → funboost-44.4/funboost.egg-info}/PKG-INFO +4 -3
- {funboost-44.3 → funboost-44.4}/funboost.egg-info/requires.txt +5 -0
- {funboost-44.3 → funboost-44.4}/setup.py +4 -2
- funboost-44.3/funboost/core/funboost_time.py +0 -28
- {funboost-44.3 → funboost-44.4}/LICENSE +0 -0
- {funboost-44.3 → funboost-44.4}/MANIFEST.in +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/__init__old.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/__main__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/assist/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/assist/celery_helper.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/assist/dramatiq_helper.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/assist/huey_helper.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/assist/rocketry_helper.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/assist/rq_helper.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/assist/rq_windows_worker.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/async_pool_executor.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/backup/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/base_pool_type.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/custom_threadpool_executor.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/pool_commons.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/single_thread_executor.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/constant.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/celery_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/confirm_mixin.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/dramatiq_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/http_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/http_consumer000.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/httpsqs_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/huey_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/kafka_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/kombu_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/local_python_queue_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/memory_deque_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/mongomq_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/mqtt_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/nameko_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/nats_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/nsq_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/peewee_conusmer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/persist_queue_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/pulsar_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/redis_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/redis_consumer_ack_able.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/redis_consumer_priority.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/redis_consumer_simple.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/redis_filter.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/redis_pubsub_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/redis_stream_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/rocketmq_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/rq_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/sqlachemy_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/tcp_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/txt_file_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/udp_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/consumers/zeromq_consumer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/contrib/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/contrib/api_publish_msg.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/contrib/django_db_deco.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/contrib/queue2queue.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/active_cousumer_info_getter.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/cli/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/cli/discovery_boosters.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/cli/funboost_fire.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/current_task.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/exceptions.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/fabric_deploy_helper.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/funboost_config_getter.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/func_params_model.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/function_result_status_config.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/function_result_status_saver.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/kill_remote_task.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/msg_result_getter.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/muliti_process_enhance.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/core/task_id_logger.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/factories/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/factories/consumer_factory.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/factories/publisher_factotry.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/app.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/functions.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/assets/css/custom.css +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/assets/js/custom.js +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/css/style.css +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/images/bg.jpg +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/images/password.png +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/images/tick.png +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/images/user.png +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/templates/index.html +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/function_result_web/templates/login.html +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/base_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/celery_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/celery_publisher000.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/confluent_kafka_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/dramatiq_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/http_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/httpsqs_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/huey_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/kafka_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/kombu_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/local_python_queue_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/meomory_deque_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/mongomq_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/mqtt_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/nameko_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/nats_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/nsq_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/peewee_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/persist_queue_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/pulsar_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/redis_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/redis_publisher_lpush.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/redis_publisher_priority.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/redis_publisher_simple.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/redis_pubsub_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/redis_stream_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/rocketmq_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/rq_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/sqla_queue_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/tcp_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/txt_file_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/udp_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/publishers/zeromq_publisher.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/queues/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/queues/peewee_queue.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/queues/sqla_queue.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/set_frame_config.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/timing_job/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/apscheduler_monkey.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/block_exit.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/bulk_operation.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/ctrl_c_end.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/custom_pysnooper.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/decorators.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/develop_log.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/expire_lock.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/json_helper.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/mongo_util.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/monkey_color_log.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/monkey_patches.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/mqtt_util.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/paramiko_util.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/pysnooper_ydf/utils.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/pysnooper_ydf/variables.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/rabbitmq_factory.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/redis_manager.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/redis_manager_old.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/resource_monitoring.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/restart_python.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/simple_data_class.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/time_util.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/times/__init__.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/times/version.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost/utils/un_strict_json_dumps.py +0 -0
- {funboost-44.3 → funboost-44.4}/funboost.egg-info/SOURCES.txt +0 -0
- {funboost-44.3 → funboost-44.4}/funboost.egg-info/dependency_links.txt +0 -0
- {funboost-44.3 → funboost-44.4}/funboost.egg-info/entry_points.txt +0 -0
- {funboost-44.3 → funboost-44.4}/funboost.egg-info/top_level.txt +0 -0
- {funboost-44.3 → funboost-44.4}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: funboost
|
|
3
|
-
Version: 44.
|
|
3
|
+
Version: 44.4
|
|
4
4
|
Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
|
|
5
5
|
Home-page: https://github.com/ydf0509/funboost
|
|
6
6
|
Author: bfzs
|
|
@@ -54,7 +54,7 @@ pip install funboost ,python全功能分布式函数调度框架,。 用法例
|
|
|
54
54
|
python函数加速器,框架包罗万象,一统编程思维,兼容50% python编程业务场景,适用范围广。
|
|
55
55
|
只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
|
|
56
56
|
python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件(或任务队列框架),
|
|
57
|
-
|
|
57
|
+
30种任务控制功能。给任意python函数赋能。
|
|
58
58
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
59
59
|
框架只需要学习@boost这一个装饰器的入参就可以,所有用法几乎和1.3例子一摸一样,非常简化简单。
|
|
60
60
|
</pre>
|
|
@@ -136,7 +136,7 @@ pip install funboost --upgrade
|
|
|
136
136
|
|
|
137
137
|
## 1.2 框架功能介绍
|
|
138
138
|
|
|
139
|
-
分布式函数调度框架,支持5种并发模式,20+种消息中间件,
|
|
139
|
+
分布式函数调度框架,支持5种并发模式,20+种消息中间件,30种任务控制功能。<br>
|
|
140
140
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
141
141
|
|
|
142
142
|
有了这个框架,用户再也无需亲自手写操作进程、线程、协程的并发的代码了。
|
|
@@ -426,6 +426,7 @@ if __name__ == "__main__":
|
|
|
426
426
|
|
|
427
427
|
<a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
|
|
428
428
|
|
|
429
|
+
<a href="https://imgse.com/i/pkE6IYR"><img src="https://s21.ax1x.com/2024/05/07/pkE6IYR.png" alt="pkE6IYR.png" border="0" /></a>
|
|
429
430
|
|
|
430
431
|
## 1.4 python分布式函数执行为什么重要?
|
|
431
432
|
|
|
@@ -22,7 +22,7 @@ pip install funboost ,python全功能分布式函数调度框架,。 用法例
|
|
|
22
22
|
python函数加速器,框架包罗万象,一统编程思维,兼容50% python编程业务场景,适用范围广。
|
|
23
23
|
只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
|
|
24
24
|
python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件(或任务队列框架),
|
|
25
|
-
|
|
25
|
+
30种任务控制功能。给任意python函数赋能。
|
|
26
26
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
27
27
|
框架只需要学习@boost这一个装饰器的入参就可以,所有用法几乎和1.3例子一摸一样,非常简化简单。
|
|
28
28
|
</pre>
|
|
@@ -104,7 +104,7 @@ pip install funboost --upgrade
|
|
|
104
104
|
|
|
105
105
|
## 1.2 框架功能介绍
|
|
106
106
|
|
|
107
|
-
分布式函数调度框架,支持5种并发模式,20+种消息中间件,
|
|
107
|
+
分布式函数调度框架,支持5种并发模式,20+种消息中间件,30种任务控制功能。<br>
|
|
108
108
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
109
109
|
|
|
110
110
|
有了这个框架,用户再也无需亲自手写操作进程、线程、协程的并发的代码了。
|
|
@@ -394,6 +394,7 @@ if __name__ == "__main__":
|
|
|
394
394
|
|
|
395
395
|
<a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
|
|
396
396
|
|
|
397
|
+
<a href="https://imgse.com/i/pkE6IYR"><img src="https://s21.ax1x.com/2024/05/07/pkE6IYR.png" alt="pkE6IYR.png" border="0" /></a>
|
|
397
398
|
|
|
398
399
|
## 1.4 python分布式函数执行为什么重要?
|
|
399
400
|
|
|
@@ -2,9 +2,11 @@ from functools import partial
|
|
|
2
2
|
import asyncio
|
|
3
3
|
from concurrent.futures import Executor
|
|
4
4
|
from funboost.concurrent_pool.custom_threadpool_executor import ThreadPoolExecutorShrinkAble
|
|
5
|
+
# from funboost.concurrent_pool.flexible_thread_pool import FlexibleThreadPool
|
|
5
6
|
|
|
6
7
|
# 没有使用内置的concurrent.futures.ThreadpoolExecutor线程池,而是使用智能伸缩线程池。
|
|
7
|
-
async_executor_default = ThreadPoolExecutorShrinkAble()
|
|
8
|
+
async_executor_default = ThreadPoolExecutorShrinkAble(500)
|
|
9
|
+
# async_executor_default = FlexibleThreadPool(50) # 这个不支持future特性
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
async def simple_run_in_executor(f, *args, async_executor: Executor = None, async_loop=None, **kwargs):
|
|
@@ -30,13 +30,12 @@ from threading import Lock
|
|
|
30
30
|
import asyncio
|
|
31
31
|
|
|
32
32
|
import nb_log
|
|
33
|
-
from funboost.core.current_task import funboost_current_task
|
|
33
|
+
from funboost.core.current_task import funboost_current_task
|
|
34
34
|
from funboost.core.loggers import develop_logger
|
|
35
35
|
|
|
36
36
|
from funboost.core.func_params_model import BoosterParams, PublisherParams, BaseJsonAbleModel
|
|
37
37
|
from funboost.core.task_id_logger import TaskIdLogger
|
|
38
|
-
from nb_log import (get_logger, LoggerLevelSetterMixin, LogManager,
|
|
39
|
-
LoggerMixinDefaultWithFileHandler, stdout_write, is_main_process,
|
|
38
|
+
from nb_log import (get_logger, LoggerLevelSetterMixin, LogManager, is_main_process,
|
|
40
39
|
nb_log_config_default)
|
|
41
40
|
from funboost.core.loggers import FunboostFileLoggerMixin, logger_prompt
|
|
42
41
|
|
|
@@ -332,7 +331,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
332
331
|
try:
|
|
333
332
|
self._concurrent_mode_dispatcher.check_all_concurrent_mode()
|
|
334
333
|
self._check_monkey_patch()
|
|
335
|
-
except BaseException:
|
|
334
|
+
except BaseException: # noqa
|
|
336
335
|
traceback.print_exc()
|
|
337
336
|
os._exit(4444) # noqa
|
|
338
337
|
self.logger.info(f'开始消费 {self._queue_name} 中的消息')
|
|
@@ -384,10 +383,10 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
384
383
|
"""
|
|
385
384
|
raise NotImplementedError
|
|
386
385
|
|
|
387
|
-
def convert_msg_before_run(self, msg: typing.Union[str,dict]):
|
|
386
|
+
def convert_msg_before_run(self, msg: typing.Union[str, dict]) -> dict:
|
|
388
387
|
"""
|
|
389
388
|
转换消息,消息没有使用funboost来发送,并且没有extra相关字段时候
|
|
390
|
-
用户也可以按照4.21文档,继承任意Consumer类,并实现这个方法 convert_msg_before_run
|
|
389
|
+
用户也可以按照4.21文档,继承任意Consumer类,并实现这个方法 convert_msg_before_run,先转换不规范的消息.
|
|
391
390
|
"""
|
|
392
391
|
""" 一般消息至少包含这样
|
|
393
392
|
{
|
|
@@ -405,7 +404,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
405
404
|
extra_params = {'task_id': task_id, 'publish_time': round(time.time(), 4),
|
|
406
405
|
'publish_time_format': time.strftime('%Y-%m-%d %H:%M:%S')}
|
|
407
406
|
"""
|
|
408
|
-
if isinstance(msg,str):
|
|
407
|
+
if isinstance(msg, str):
|
|
409
408
|
msg = json.loads(msg)
|
|
410
409
|
# 以下是清洗补全字段.
|
|
411
410
|
if 'extra' not in msg:
|
|
@@ -429,9 +428,8 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
429
428
|
self._last_show_pause_log_time = time.time()
|
|
430
429
|
else:
|
|
431
430
|
break
|
|
432
|
-
|
|
433
|
-
self.
|
|
434
|
-
kw['body'] = self.convert_msg_before_run(msg)
|
|
431
|
+
self._print_message_get_from_broker(kw['body'])
|
|
432
|
+
kw['body'] = self.convert_msg_before_run(kw['body'])
|
|
435
433
|
if self._judge_is_daylight():
|
|
436
434
|
self._requeue(kw)
|
|
437
435
|
time.sleep(self.time_interval_for_check_do_not_run_time)
|
|
@@ -530,7 +528,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
530
528
|
if self._has_execute_times_in_recent_second >= qpsx:
|
|
531
529
|
time.sleep((1 - (time.time() - self._last_start_count_qps_timestamp)) * 1)
|
|
532
530
|
|
|
533
|
-
def _print_message_get_from_broker(self, msg,broker_name=None):
|
|
531
|
+
def _print_message_get_from_broker(self, msg, broker_name=None):
|
|
534
532
|
# print(999)
|
|
535
533
|
if self.consumer_params.is_show_message_get_from_broker:
|
|
536
534
|
if isinstance(msg, (dict, list)):
|
|
@@ -624,13 +622,15 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
624
622
|
msg = f'{self._unit_time_for_count} 秒内执行了 {self._execute_task_times_every_unit_time} 次函数 [ {self.consuming_function.__name__} ] ,' \
|
|
625
623
|
f'函数平均运行耗时 {avarage_function_spend_time} 秒。 '
|
|
626
624
|
self.logger.info(msg)
|
|
627
|
-
if
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
625
|
+
if time.time() - self._last_show_remaining_execution_time > self._show_remaining_execution_time_interval:
|
|
626
|
+
self._msg_num_in_broker = self.publisher_of_same_queue.get_message_count()
|
|
627
|
+
if self._msg_num_in_broker != -1 : # 有的中间件无法统计或没实现统计队列剩余数量的,统一返回的是-1,不显示这句话。
|
|
628
|
+
# msg += f''' ,预计还需要 {time_util.seconds_to_hour_minute_second(self._msg_num_in_broker * avarage_function_spend_time / active_consumer_num)} 时间 才能执行完成 {self._msg_num_in_broker}个剩余的任务'''
|
|
629
|
+
need_time = time_util.seconds_to_hour_minute_second(self._msg_num_in_broker / (self._execute_task_times_every_unit_time / self._unit_time_for_count) /
|
|
630
|
+
self._distributed_consumer_statistics.active_consumer_num)
|
|
631
|
+
msg += f''' 预计还需要 {need_time} 时间 才能执行完成 队列 {self.queue_name} 中的 {self._msg_num_in_broker} 个剩余任务'''
|
|
632
|
+
self.logger.info(msg)
|
|
633
|
+
self._last_show_remaining_execution_time = time.time()
|
|
634
634
|
self._current_time_for_execute_task_times_every_unit_time = time.time()
|
|
635
635
|
self._consuming_function_cost_time_total_every_unit_time = 0
|
|
636
636
|
self._execute_task_times_every_unit_time = 0
|
|
@@ -830,7 +830,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
830
830
|
self.logger.critical(msg=log_msg)
|
|
831
831
|
# noinspection PyProtectedMember,PyUnresolvedReferences
|
|
832
832
|
os._exit(444)
|
|
833
|
-
if not self.consumer_params.function_timeout
|
|
833
|
+
if not self.consumer_params.function_timeout:
|
|
834
834
|
rs = await corotinue_obj
|
|
835
835
|
# rs = await asyncio.wait_for(corotinue_obj, timeout=4)
|
|
836
836
|
else:
|
|
@@ -4,6 +4,8 @@ import os
|
|
|
4
4
|
import types
|
|
5
5
|
import typing
|
|
6
6
|
|
|
7
|
+
from funboost.concurrent_pool import FlexibleThreadPool
|
|
8
|
+
from funboost.concurrent_pool.async_helper import simple_run_in_executor
|
|
7
9
|
from funboost.utils.ctrl_c_end import ctrl_c_recv
|
|
8
10
|
from funboost.core.loggers import flogger, develop_logger, logger_prompt
|
|
9
11
|
|
|
@@ -15,8 +17,8 @@ from funboost.core.func_params_model import BoosterParams, FunctionResultStatusP
|
|
|
15
17
|
from funboost.factories.consumer_factory import get_consumer
|
|
16
18
|
from collections import defaultdict
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
|
|
21
|
+
from funboost.core.msg_result_getter import AsyncResult, AioAsyncResult
|
|
20
22
|
|
|
21
23
|
|
|
22
24
|
class Booster:
|
|
@@ -123,6 +125,19 @@ class Booster:
|
|
|
123
125
|
consumer = BoostersManager.get_or_create_booster_by_queue_name(self.queue_name).consumer
|
|
124
126
|
return consumer.publisher_of_same_queue.publish(msg=msg, task_id=task_id, priority_control_config=priority_control_config)
|
|
125
127
|
|
|
128
|
+
async def aio_push(self, *func_args, **func_kwargs) -> AioAsyncResult:
|
|
129
|
+
"""asyncio 生态下发布消息,因为同步push只需要消耗不到1毫秒,所以基本上大概可以直接在asyncio异步生态中直接调用同步的push方法,
|
|
130
|
+
但为了更好的防止网络波动(例如发布消息到外网的消息队列耗时达到10毫秒),可以使用aio_push"""
|
|
131
|
+
async_result = await simple_run_in_executor(self.push, *func_args, **func_kwargs)
|
|
132
|
+
return AioAsyncResult(async_result.task_id, )
|
|
133
|
+
|
|
134
|
+
async def aio_publish(self, msg: typing.Union[str, dict], task_id=None,
|
|
135
|
+
priority_control_config: PriorityConsumingControlConfig = None) -> AioAsyncResult:
|
|
136
|
+
"""asyncio 生态下发布消息,因为同步push只需要消耗不到1毫秒,所以基本上大概可以直接在asyncio异步生态中直接调用同步的push方法,
|
|
137
|
+
但为了更好的防止网络波动(例如发布消息到外网的消息队列耗时达到10毫秒),可以使用aio_push"""
|
|
138
|
+
async_result = await simple_run_in_executor(self.publish,msg,task_id,priority_control_config)
|
|
139
|
+
return AioAsyncResult(async_result.task_id, )
|
|
140
|
+
|
|
126
141
|
# noinspection PyMethodMayBeStatic
|
|
127
142
|
def multi_process_consume(self, process_num=1):
|
|
128
143
|
"""超高速多进程消费"""
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import pytz
|
|
2
|
+
import time
|
|
3
|
+
|
|
4
|
+
import datetime
|
|
5
|
+
|
|
6
|
+
import typing
|
|
7
|
+
|
|
8
|
+
from nb_time import NbTime
|
|
9
|
+
from funboost.funboost_config_deafult import FunboostCommonConfig
|
|
10
|
+
|
|
11
|
+
class FunboostTime(NbTime):
|
|
12
|
+
default_formatter = NbTime.FORMATTER_DATETIME_NO_ZONE
|
|
13
|
+
def get_time_zone_str(self,time_zone: typing.Union[str, datetime.tzinfo,None] = None):
|
|
14
|
+
return time_zone or self.default_time_zone or FunboostCommonConfig.TIMEZONE or self.get_localzone_name()
|
|
15
|
+
|
|
16
|
+
@staticmethod
|
|
17
|
+
def _get_tow_digist(num:int)->str:
|
|
18
|
+
if len(str(num)) ==1:
|
|
19
|
+
return f'0{num}'
|
|
20
|
+
return str(num)
|
|
21
|
+
|
|
22
|
+
def get_str(self, formatter=None):
|
|
23
|
+
return self.datetime_obj.strftime(formatter or self.datetime_formatter)
|
|
24
|
+
|
|
25
|
+
def get_str_fast(self):
|
|
26
|
+
t_str = f'{self.datetime_obj.year}-{self._get_tow_digist(self.datetime_obj.month)}-{self._get_tow_digist(self.datetime_obj.day)} {self._get_tow_digist(self.datetime_obj.hour)}:{self._get_tow_digist(self.datetime_obj.minute)}:{self._get_tow_digist(self.datetime_obj.second)}'
|
|
27
|
+
return t_str
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
if __name__ == '__main__':
|
|
31
|
+
print(FunboostTime().get_str())
|
|
32
|
+
tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)
|
|
33
|
+
for i in range(1000000):
|
|
34
|
+
pass
|
|
35
|
+
# FunboostTime()#.get_str_fast()
|
|
36
|
+
|
|
37
|
+
# datetime.datetime.now().strftime(NbTime.FORMATTER_DATETIME_NO_ZONE)
|
|
38
|
+
tz = pytz.timezone(FunboostCommonConfig.TIMEZONE)
|
|
39
|
+
datetime.datetime.now(tz=tz)
|
|
40
|
+
# datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE))#.strftime(NbTime.FORMATTER_DATETIME_NO_ZONE)
|
|
41
|
+
# datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)).timestamp()
|
|
42
|
+
|
|
43
|
+
# time.strftime(NbTime.FORMATTER_DATETIME_NO_ZONE)
|
|
44
|
+
# time.time()
|
|
45
|
+
print(NbTime())
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import copy
|
|
2
|
+
import pytz
|
|
2
3
|
import time
|
|
3
4
|
import uuid
|
|
4
|
-
|
|
5
|
+
import datetime
|
|
5
6
|
from funboost.core.funboost_time import FunboostTime
|
|
6
7
|
|
|
7
8
|
|
|
@@ -46,7 +47,7 @@ class MsgGenerater:
|
|
|
46
47
|
|
|
47
48
|
@staticmethod
|
|
48
49
|
def generate_publish_time() -> float:
|
|
49
|
-
return round(
|
|
50
|
+
return round(time.time(),4)
|
|
50
51
|
|
|
51
52
|
@staticmethod
|
|
52
53
|
def generate_publish_time_format() -> str:
|
|
@@ -59,3 +60,16 @@ class MsgGenerater:
|
|
|
59
60
|
return extra_params
|
|
60
61
|
|
|
61
62
|
|
|
63
|
+
|
|
64
|
+
if __name__ == '__main__':
|
|
65
|
+
|
|
66
|
+
from funboost import FunboostCommonConfig
|
|
67
|
+
|
|
68
|
+
print(FunboostTime())
|
|
69
|
+
for i in range(1000000):
|
|
70
|
+
# time.time()
|
|
71
|
+
# MsgGenerater.generate_publish_time_format()
|
|
72
|
+
|
|
73
|
+
datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)).strftime(FunboostTime.FORMATTER_DATETIME_NO_ZONE)
|
|
74
|
+
|
|
75
|
+
print(FunboostTime())
|
|
@@ -40,11 +40,11 @@ class FunboostMetaTypeFileLogger(type):
|
|
|
40
40
|
cls.logger: logging.Logger = get_funboost_file_logger(name)
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
nb_log.LogManager('_KeepAliveTimeThread').preset_log_level(_try_get_user_funboost_common_config('KEEPALIVETIMETHREAD_LOG_LEVEL') or logging.DEBUG)
|
|
44
44
|
|
|
45
|
+
flogger = get_funboost_file_logger('funboost', )
|
|
45
46
|
# print(_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL'))
|
|
46
|
-
logger_prompt = get_funboost_file_logger('funboost.prompt', log_level_int=_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL') or logging.DEBUG)
|
|
47
|
-
nb_log.LogManager('_KeepAliveTimeThread').preset_log_level(_try_get_user_funboost_common_config('KEEPALIVETIMETHREAD_LOG_LEVEL') or logging.DEBUG)
|
|
47
|
+
logger_prompt = get_funboost_file_logger('funboost.prompt', log_level_int=_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL') or logging.DEBUG)
|
|
48
48
|
|
|
49
49
|
# 开发时候的调试日志,比print方便通过级别一键屏蔽。
|
|
50
50
|
develop_logger = get_logger('funboost_develop', log_level_int=logging.WARNING, log_filename='funboost_develop.log')
|
|
@@ -87,7 +87,7 @@ class BrokerConnConfig(DataClassBase):
|
|
|
87
87
|
KOMBU_URL = 'redis://127.0.0.1:6379/9' # 这个就是celery依赖包kombu使用的消息队列格式,所以funboost支持一切celery支持的消息队列种类。
|
|
88
88
|
# KOMBU_URL = 'sqla+sqlite:////dssf_kombu_sqlite.sqlite' # 4个//// 代表磁盘根目录下生成一个文件。推荐绝对路径。3个///是相对路径。
|
|
89
89
|
|
|
90
|
-
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/12' # 使用celery作为中间件。funboost新增支持celery
|
|
90
|
+
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/12' # 使用celery作为中间件。funboost新增支持celery框架来运行函数,url内容就是celery的broker形式.
|
|
91
91
|
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/13' # celery结果存放,可以为None
|
|
92
92
|
|
|
93
93
|
DRAMATIQ_URL = RABBITMQ_URL
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: funboost
|
|
3
|
-
Version: 44.
|
|
3
|
+
Version: 44.4
|
|
4
4
|
Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
|
|
5
5
|
Home-page: https://github.com/ydf0509/funboost
|
|
6
6
|
Author: bfzs
|
|
@@ -54,7 +54,7 @@ pip install funboost ,python全功能分布式函数调度框架,。 用法例
|
|
|
54
54
|
python函数加速器,框架包罗万象,一统编程思维,兼容50% python编程业务场景,适用范围广。
|
|
55
55
|
只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
|
|
56
56
|
python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件(或任务队列框架),
|
|
57
|
-
|
|
57
|
+
30种任务控制功能。给任意python函数赋能。
|
|
58
58
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
59
59
|
框架只需要学习@boost这一个装饰器的入参就可以,所有用法几乎和1.3例子一摸一样,非常简化简单。
|
|
60
60
|
</pre>
|
|
@@ -136,7 +136,7 @@ pip install funboost --upgrade
|
|
|
136
136
|
|
|
137
137
|
## 1.2 框架功能介绍
|
|
138
138
|
|
|
139
|
-
分布式函数调度框架,支持5种并发模式,20+种消息中间件,
|
|
139
|
+
分布式函数调度框架,支持5种并发模式,20+种消息中间件,30种任务控制功能。<br>
|
|
140
140
|
用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
|
|
141
141
|
|
|
142
142
|
有了这个框架,用户再也无需亲自手写操作进程、线程、协程的并发的代码了。
|
|
@@ -426,6 +426,7 @@ if __name__ == "__main__":
|
|
|
426
426
|
|
|
427
427
|
<a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
|
|
428
428
|
|
|
429
|
+
<a href="https://imgse.com/i/pkE6IYR"><img src="https://s21.ax1x.com/2024/05/07/pkE6IYR.png" alt="pkE6IYR.png" border="0" /></a>
|
|
429
430
|
|
|
430
431
|
## 1.4 python分布式函数执行为什么重要?
|
|
431
432
|
|
|
@@ -27,6 +27,8 @@ extra_brokers = ['confluent_kafka==1.7.0',
|
|
|
27
27
|
'pyzmq',
|
|
28
28
|
'kafka-python==2.0.2',
|
|
29
29
|
]
|
|
30
|
+
|
|
31
|
+
extra_flask = ['flask', 'flask_bootstrap', 'flask_wtf', 'wtforms', 'flask_login']
|
|
30
32
|
setup(
|
|
31
33
|
name='funboost', #
|
|
32
34
|
version=__version__,
|
|
@@ -102,9 +104,9 @@ setup(
|
|
|
102
104
|
'fire',
|
|
103
105
|
'pydantic',
|
|
104
106
|
],
|
|
105
|
-
extras_require={'all': extra_brokers,
|
|
107
|
+
extras_require={'all': extra_brokers + extra_flask,
|
|
106
108
|
'extra_brokers': extra_brokers,
|
|
107
|
-
'flask':
|
|
109
|
+
'flask': extra_flask,
|
|
108
110
|
},
|
|
109
111
|
|
|
110
112
|
entry_points={
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import pytz
|
|
2
|
-
import time
|
|
3
|
-
|
|
4
|
-
import datetime
|
|
5
|
-
|
|
6
|
-
import typing
|
|
7
|
-
|
|
8
|
-
from nb_time import NbTime
|
|
9
|
-
from funboost.funboost_config_deafult import FunboostCommonConfig
|
|
10
|
-
|
|
11
|
-
class FunboostTime(NbTime):
|
|
12
|
-
default_formatter = NbTime.FORMATTER_DATETIME_NO_ZONE
|
|
13
|
-
def get_time_zone_str(self,time_zone: typing.Union[str, datetime.tzinfo,None] = None):
|
|
14
|
-
return time_zone or self.default_time_zone or FunboostCommonConfig.TIMEZONE or self.get_localzone_name()
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if __name__ == '__main__':
|
|
19
|
-
print(NbTime())
|
|
20
|
-
for i in range(100000):
|
|
21
|
-
# print(generate_publish_time())
|
|
22
|
-
# print(generate_publish_time_format())
|
|
23
|
-
# generate_publish_time()
|
|
24
|
-
# generate_publish_time_format()
|
|
25
|
-
|
|
26
|
-
datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)).strftime(NbTime.FORMATTER_DATETIME_NO_ZONE)
|
|
27
|
-
datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)).timestamp()
|
|
28
|
-
print(NbTime())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funboost-44.3 → funboost-44.4}/funboost/beggar_version_implementation/beggar_redis_consumer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/backup/async_pool_executor_janus.py
RENAMED
|
File without changes
|
|
File without changes
|
{funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funboost-44.3 → funboost-44.4}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|