funboost 41.0__tar.gz → 41.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of funboost might be problematic. Click here for more details.
- {funboost-41.0/funboost.egg-info → funboost-41.2}/PKG-INFO +1 -1
- {funboost-41.0 → funboost-41.2}/funboost/__init__.py +2 -2
- {funboost-41.0 → funboost-41.2}/funboost/assist/dramatiq_helper.py +2 -2
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/__init__.py +2 -1
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/flexible_thread_pool.py +14 -4
- funboost-41.2/funboost/concurrent_pool/pool_commons.py +27 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/base_consumer.py +20 -12
- {funboost-41.0 → funboost-41.2}/funboost/core/booster.py +7 -5
- {funboost-41.0 → funboost-41.2}/funboost/core/exceptions.py +1 -1
- {funboost-41.0 → funboost-41.2}/funboost/core/func_params_model.py +12 -7
- {funboost-41.0 → funboost-41.2}/funboost/core/function_result_status_saver.py +1 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/loggers.py +1 -1
- {funboost-41.0 → funboost-41.2}/funboost/core/msg_result_getter.py +2 -2
- {funboost-41.0 → funboost-41.2}/funboost/set_frame_config.py +1 -1
- {funboost-41.0 → funboost-41.2/funboost.egg-info}/PKG-INFO +1 -1
- {funboost-41.0 → funboost-41.2}/funboost.egg-info/SOURCES.txt +1 -0
- {funboost-41.0 → funboost-41.2}/LICENSE +0 -0
- {funboost-41.0 → funboost-41.2}/MANIFEST.in +0 -0
- {funboost-41.0 → funboost-41.2}/README.md +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/__init__old.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/__main__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/assist/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/assist/celery_helper.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/assist/huey_helper.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/assist/rocketry_helper.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/assist/rq_helper.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/assist/rq_windows_worker.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/async_helper.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/async_pool_executor.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/backup/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/base_pool_type.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/custom_threadpool_executor.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/single_thread_executor.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/constant.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/celery_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/confirm_mixin.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/dramatiq_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/http_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/http_consumer000.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/httpsqs_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/huey_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/kafka_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/kombu_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/local_python_queue_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/memory_deque_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/mongomq_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/mqtt_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/nameko_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/nats_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/nsq_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/peewee_conusmer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/persist_queue_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/pulsar_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/redis_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/redis_consumer_ack_able.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/redis_consumer_priority.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/redis_consumer_simple.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/redis_filter.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/redis_pubsub_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/redis_stream_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/rocketmq_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/rq_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/sqlachemy_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/tcp_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/txt_file_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/udp_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/consumers/zeromq_consumer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/contrib/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/contrib/api_publish_msg.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/contrib/queue2queue.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/active_cousumer_info_getter.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/cli/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/cli/discovery_boosters.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/cli/funboost_fire.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/fabric_deploy_helper.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/function_result_status_config.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/helper_funs.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/kill_remote_task.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/muliti_process_enhance.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/core/show_funboost_flag.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/factories/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/factories/consumer_factory.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/factories/publisher_factotry.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/funboost_config_deafult.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/app.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/functions.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/assets/css/custom.css +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/assets/js/custom.js +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/css/style.css +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/images/bg.jpg +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/images/password.png +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/images/tick.png +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/images/user.png +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/templates/index.html +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/function_result_web/templates/login.html +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/base_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/celery_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/celery_publisher000.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/confluent_kafka_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/dramatiq_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/http_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/httpsqs_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/huey_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/kafka_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/kombu_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/local_python_queue_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/meomory_deque_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/mongomq_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/mqtt_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/nameko_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/nats_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/nsq_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/peewee_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/persist_queue_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/pulsar_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/redis_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/redis_publisher_lpush.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/redis_publisher_priority.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/redis_publisher_simple.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/redis_pubsub_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/redis_stream_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/rocketmq_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/rq_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/sqla_queue_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/tcp_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/txt_file_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/udp_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/publishers/zeromq_publisher.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/queues/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/queues/peewee_queue.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/queues/sqla_queue.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/timing_job/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/apscheduler_monkey.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/block_exit.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/bulk_operation.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/ctrl_c_end.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/custom_pysnooper.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/decorators.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/develop_log.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/expire_lock.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/json_helper.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/mongo_util.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/monkey_color_log.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/monkey_patches.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/mqtt_util.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/paramiko_util.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/pysnooper_ydf/utils.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/pysnooper_ydf/variables.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/rabbitmq_factory.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/redis_manager.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/redis_manager_old.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/resource_monitoring.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/restart_python.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/simple_data_class.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/time_util.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/times/__init__.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/times/version.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost/utils/un_strict_json_dumps.py +0 -0
- {funboost-41.0 → funboost-41.2}/funboost.egg-info/dependency_links.txt +0 -0
- {funboost-41.0 → funboost-41.2}/funboost.egg-info/entry_points.txt +0 -0
- {funboost-41.0 → funboost-41.2}/funboost.egg-info/requires.txt +0 -0
- {funboost-41.0 → funboost-41.2}/funboost.egg-info/top_level.txt +0 -0
- {funboost-41.0 → funboost-41.2}/setup.cfg +0 -0
- {funboost-41.0 → funboost-41.2}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: funboost
|
|
3
|
-
Version: 41.
|
|
3
|
+
Version: 41.2
|
|
4
4
|
Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持celery框架整体作为funboost中间件,python函数加速器,框架包罗万象,一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 方便 快速 强大,相见恨晚
|
|
5
5
|
Home-page: https://github.com/ydf0509/funboost
|
|
6
6
|
Author: bfzs
|
|
@@ -13,7 +13,7 @@ set_frame_config这个模块的 use_config_form_funboost_config_module() 是核
|
|
|
13
13
|
这段注释说明和使用的用户无关,只和框架开发人员有关.
|
|
14
14
|
'''
|
|
15
15
|
|
|
16
|
-
__version__ = "41.
|
|
16
|
+
__version__ = "41.2"
|
|
17
17
|
|
|
18
18
|
from funboost.set_frame_config import show_frame_config
|
|
19
19
|
|
|
@@ -21,7 +21,7 @@ from funboost.set_frame_config import show_frame_config
|
|
|
21
21
|
from funboost.utils.dependency_packages_in_pythonpath import add_to_pythonpath # 这是把 dependency_packages_in_pythonpath 添加到 PYTHONPATH了。
|
|
22
22
|
from funboost.utils import monkey_patches
|
|
23
23
|
|
|
24
|
-
from funboost.core.loggers import get_logger, get_funboost_file_logger, FunboostFileLoggerMixin,
|
|
24
|
+
from funboost.core.loggers import get_logger, get_funboost_file_logger, FunboostFileLoggerMixin, FunboostMetaTypeFileLogger, flogger
|
|
25
25
|
from funboost.core.func_params_model import (BoosterParams, BoosterParamsComplete, FunctionResultStatusPersistanceConfig,
|
|
26
26
|
PriorityConsumingControlConfig, PublisherParams, BoosterParamsComplete)
|
|
27
27
|
from funboost.funboost_config_deafult import FunboostCommonConfig, BrokerConnConfig
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import argparse
|
|
2
|
-
from funboost.core.loggers import
|
|
2
|
+
from funboost.core.loggers import FunboostMetaTypeFileLogger
|
|
3
3
|
import dramatiq
|
|
4
4
|
from dramatiq.cli import main
|
|
5
5
|
from funboost.funboost_config_deafult import BrokerConnConfig
|
|
@@ -19,7 +19,7 @@ dramatiq.set_broker(broker)
|
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class DramatiqHelper(metaclass=
|
|
22
|
+
class DramatiqHelper(metaclass=FunboostMetaTypeFileLogger):
|
|
23
23
|
|
|
24
24
|
broker = dramatiq.get_broker()
|
|
25
25
|
to_be_start_work_celery_queue_name_set = set() # 存放需要worker运行的queue name。
|
|
@@ -16,4 +16,5 @@ from .async_pool_executor import AsyncPoolExecutor
|
|
|
16
16
|
# from .custom_gevent_pool_executor import GeventPoolExecutor
|
|
17
17
|
from .bounded_threadpoolexcutor import BoundedThreadPoolExecutor
|
|
18
18
|
from .custom_threadpool_executor import CustomThreadPoolExecutor
|
|
19
|
-
from .flexible_thread_pool import FlexibleThreadPool
|
|
19
|
+
from .flexible_thread_pool import FlexibleThreadPool
|
|
20
|
+
from .pool_commons import ConcurrentPoolBuilder
|
|
@@ -10,14 +10,16 @@
|
|
|
10
10
|
|
|
11
11
|
import asyncio
|
|
12
12
|
import inspect
|
|
13
|
+
import os
|
|
13
14
|
import queue
|
|
14
15
|
import threading
|
|
15
16
|
from functools import wraps
|
|
16
17
|
|
|
17
18
|
from funboost.concurrent_pool import FunboostBaseConcurrentPool
|
|
18
|
-
from funboost.core.loggers import FunboostFileLoggerMixin,LoggerLevelSetterMixin,
|
|
19
|
+
from funboost.core.loggers import FunboostFileLoggerMixin, LoggerLevelSetterMixin, FunboostMetaTypeFileLogger
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
|
|
22
|
+
class FlexibleThreadPool(FunboostFileLoggerMixin, LoggerLevelSetterMixin, FunboostBaseConcurrentPool):
|
|
21
23
|
KEEP_ALIVE_TIME = 10
|
|
22
24
|
MIN_WORKERS = 2
|
|
23
25
|
|
|
@@ -51,6 +53,7 @@ class FlexibleThreadPool(FunboostFileLoggerMixin, LoggerLevelSetterMixin,Funboos
|
|
|
51
53
|
class FlexibleThreadPoolMinWorkers0(FlexibleThreadPool):
|
|
52
54
|
MIN_WORKERS = 0
|
|
53
55
|
|
|
56
|
+
|
|
54
57
|
def run_sync_or_async_fun000(func, *args, **kwargs):
|
|
55
58
|
"""这种方式造成电脑很卡,不行"""
|
|
56
59
|
fun_is_asyncio = inspect.iscoroutinefunction(func)
|
|
@@ -63,12 +66,16 @@ def run_sync_or_async_fun000(func, *args, **kwargs):
|
|
|
63
66
|
else:
|
|
64
67
|
return func(*args, **kwargs)
|
|
65
68
|
|
|
69
|
+
|
|
66
70
|
tl = threading.local()
|
|
71
|
+
|
|
72
|
+
|
|
67
73
|
def _get_thread_local_loop() -> asyncio.AbstractEventLoop:
|
|
68
|
-
if not hasattr(tl,'asyncio_loop'):
|
|
74
|
+
if not hasattr(tl, 'asyncio_loop'):
|
|
69
75
|
tl.asyncio_loop = asyncio.new_event_loop()
|
|
70
76
|
return tl.asyncio_loop
|
|
71
77
|
|
|
78
|
+
|
|
72
79
|
def run_sync_or_async_fun(func, *args, **kwargs):
|
|
73
80
|
fun_is_asyncio = inspect.iscoroutinefunction(func)
|
|
74
81
|
if fun_is_asyncio:
|
|
@@ -91,7 +98,7 @@ def sync_or_async_fun_deco(func):
|
|
|
91
98
|
|
|
92
99
|
|
|
93
100
|
# noinspection PyProtectedMember
|
|
94
|
-
class _KeepAliveTimeThread(threading.Thread,metaclass=
|
|
101
|
+
class _KeepAliveTimeThread(threading.Thread, metaclass=FunboostMetaTypeFileLogger):
|
|
95
102
|
def __init__(self, thread_pool: FlexibleThreadPool):
|
|
96
103
|
super().__init__()
|
|
97
104
|
self.pool = thread_pool
|
|
@@ -122,6 +129,9 @@ class _KeepAliveTimeThread(threading.Thread,metaclass=MetaTypeFileLogger):
|
|
|
122
129
|
self.pool._change_threads_free_count(1)
|
|
123
130
|
|
|
124
131
|
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
125
135
|
if __name__ == '__main__':
|
|
126
136
|
import time
|
|
127
137
|
from concurrent.futures import ThreadPoolExecutor
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import threading
|
|
3
|
+
import typing
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
from funboost.concurrent_pool.flexible_thread_pool import FlexibleThreadPool
|
|
7
|
+
from funboost.concurrent_pool.base_pool_type import FunboostBaseConcurrentPool
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ConcurrentPoolBuilder:
|
|
11
|
+
_pid__pool_map = {}
|
|
12
|
+
_lock = threading.Lock()
|
|
13
|
+
|
|
14
|
+
@classmethod
|
|
15
|
+
def get_pool(cls, pool_type: typing.Type[FunboostBaseConcurrentPool], max_workers: int = None):
|
|
16
|
+
key = (os.getpid(), pool_type)
|
|
17
|
+
with cls._lock:
|
|
18
|
+
if key not in cls._pid__pool_map:
|
|
19
|
+
pool = pool_type(max_workers) # noqa
|
|
20
|
+
cls._pid__pool_map[key] = pool
|
|
21
|
+
return cls._pid__pool_map[key]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if __name__ == '__main__':
|
|
25
|
+
for i in range(10):
|
|
26
|
+
pool = functools.partial(ConcurrentPoolBuilder.get_pool, FlexibleThreadPool, 200)()
|
|
27
|
+
print(id(pool))
|
|
@@ -74,6 +74,7 @@ class GlobalVars:
|
|
|
74
74
|
global_concurrent_mode = None
|
|
75
75
|
has_start_a_consumer_flag = False
|
|
76
76
|
|
|
77
|
+
|
|
77
78
|
# noinspection DuplicatedCode
|
|
78
79
|
class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
79
80
|
time_interval_for_check_do_not_run_time = 60
|
|
@@ -108,7 +109,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
108
109
|
:return:
|
|
109
110
|
"""
|
|
110
111
|
# ConsumersManager.join_all_consumer_shedual_task_thread()
|
|
111
|
-
if GlobalVars.has_start_a_consumer_flag
|
|
112
|
+
if GlobalVars.has_start_a_consumer_flag:
|
|
112
113
|
while 1:
|
|
113
114
|
time.sleep(10)
|
|
114
115
|
|
|
@@ -134,9 +135,12 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
134
135
|
self._concurrent_mode_dispatcher = ConcurrentModeDispatcher(self)
|
|
135
136
|
if consumer_params.concurrent_mode == ConcurrentModeEnum.ASYNC:
|
|
136
137
|
self._run = self._async_run # 这里做了自动转化,使用async_run代替run
|
|
137
|
-
self.logger:logging.Logger
|
|
138
|
+
self.logger: logging.Logger
|
|
138
139
|
self._build_logger()
|
|
139
|
-
stdout_write(f'''{time.strftime("%H:%M:%S")} "{self.consumer_params.auto_generate_info['where_to_instantiate']}" \033[0;37;44m此行 实例化队列名 {self.queue_name} 的消费者, 类型为 {self.__class__}\033[0m\n''')
|
|
140
|
+
# stdout_write(f'''{time.strftime("%H:%M:%S")} "{self.consumer_params.auto_generate_info['where_to_instantiate']}" \033[0;37;44m此行 实例化队列名 {self.queue_name} 的消费者, 类型为 {self.__class__}\033[0m\n''')
|
|
141
|
+
print(f'''\033[0m
|
|
142
|
+
"{self.consumer_params.auto_generate_info['where_to_instantiate']}" \033[0m此行 实例化队列名 {self.queue_name} 的消费者, 类型为 {self.__class__} ''')
|
|
143
|
+
|
|
140
144
|
# only_print_on_main_process(f'{current_queue__info_dict["queue_name"]} 的消费者配置:\n', un_strict_json_dumps.dict2json(current_queue__info_dict))
|
|
141
145
|
|
|
142
146
|
# self._do_task_filtering = consumer_params.do_task_filtering
|
|
@@ -182,6 +186,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
182
186
|
|
|
183
187
|
self.consumer_identification = f'{nb_log_config_default.computer_name}_{nb_log_config_default.computer_ip}_' \
|
|
184
188
|
f'{time_util.DatetimeConverter().datetime_str.replace(":", "-")}_{os.getpid()}_{id(self)}'
|
|
189
|
+
# noinspection PyUnresolvedReferences
|
|
185
190
|
self.consumer_identification_map = {'queue_name': self.queue_name,
|
|
186
191
|
'computer_name': nb_log_config_default.computer_name,
|
|
187
192
|
'computer_ip': nb_log_config_default.computer_ip,
|
|
@@ -219,10 +224,11 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
219
224
|
logger_name = f'funboost.{logger_prefix}{self.__class__.__name__}--{self.queue_name}'
|
|
220
225
|
log_filename = self.consumer_params.log_filename or f'funboost.{self.queue_name}.log'
|
|
221
226
|
self.logger = get_logger(logger_name,
|
|
222
|
-
|
|
227
|
+
log_level_int=self.consumer_params.log_level,
|
|
223
228
|
log_filename=log_filename if self.consumer_params.create_logger_file else None,
|
|
224
|
-
error_log_filename=
|
|
225
|
-
|
|
229
|
+
error_log_filename=nb_log.generate_error_file_name(log_filename),
|
|
230
|
+
formatter_template=FunboostCommonConfig.NB_LOG_FORMATER_INDEX_FOR_CONSUMER_AND_PUBLISHER, )
|
|
231
|
+
self.logger.info(f'队列 {self.queue_name} 的日志写入到 {nb_log_config_default.LOG_PATH} 文件夹的 {log_filename} 和 {nb_log.generate_error_file_name(log_filename)} 文件中')
|
|
226
232
|
|
|
227
233
|
def _check_broker_exclusive_config(self):
|
|
228
234
|
broker_exclusive_config_keys = self.consumer_params.broker_exclusive_config.keys()
|
|
@@ -302,7 +308,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
302
308
|
# ConsumersManager.show_all_consumer_info()
|
|
303
309
|
# noinspection PyBroadException
|
|
304
310
|
|
|
305
|
-
GlobalVars.has_start_a_consumer_flag =True
|
|
311
|
+
GlobalVars.has_start_a_consumer_flag = True
|
|
306
312
|
try:
|
|
307
313
|
self._concurrent_mode_dispatcher.check_all_concurrent_mode()
|
|
308
314
|
self._check_monkey_patch()
|
|
@@ -543,9 +549,10 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
543
549
|
with RedisMixin().redis_db_filter_and_rpc_result.pipeline() as p:
|
|
544
550
|
# RedisMixin().redis_db_frame.lpush(kw['body']['extra']['task_id'], json.dumps(function_result_status.get_status_dict(without_datetime_obj=True)))
|
|
545
551
|
# RedisMixin().redis_db_frame.expire(kw['body']['extra']['task_id'], 600)
|
|
552
|
+
current_function_result_status.rpc_result_expire_seconds = self.consumer_params.rpc_result_expire_seconds
|
|
546
553
|
p.lpush(kw['body']['extra']['task_id'],
|
|
547
554
|
json.dumps(current_function_result_status.get_status_dict(without_datetime_obj=True)))
|
|
548
|
-
p.expire(kw['body']['extra']['task_id'],
|
|
555
|
+
p.expire(kw['body']['extra']['task_id'], self.consumer_params.rpc_result_expire_seconds)
|
|
549
556
|
p.execute()
|
|
550
557
|
|
|
551
558
|
with self._lock_for_count_execute_task_times_every_unit_time:
|
|
@@ -692,9 +699,10 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
692
699
|
if self._get_priority_conf(kw, 'is_using_rpc_mode'):
|
|
693
700
|
def push_result():
|
|
694
701
|
with RedisMixin().redis_db_filter_and_rpc_result.pipeline() as p:
|
|
702
|
+
current_function_result_status.rpc_result_expire_seconds = self.consumer_params.rpc_result_expire_seconds
|
|
695
703
|
p.lpush(kw['body']['extra']['task_id'],
|
|
696
704
|
json.dumps(current_function_result_status.get_status_dict(without_datetime_obj=True)))
|
|
697
|
-
p.expire(kw['body']['extra']['task_id'],
|
|
705
|
+
p.expire(kw['body']['extra']['task_id'], self.consumer_params.rpc_result_expire_seconds)
|
|
698
706
|
p.execute()
|
|
699
707
|
|
|
700
708
|
if (current_function_result_status.success is False and current_retry_times == max_retry_times) or current_function_result_status.success is True:
|
|
@@ -901,15 +909,15 @@ class ConcurrentModeDispatcher(FunboostFileLoggerMixin):
|
|
|
901
909
|
elif self._concurrent_mode == ConcurrentModeEnum.EVENTLET:
|
|
902
910
|
from funboost.concurrent_pool.custom_evenlet_pool_executor import evenlet_timeout_deco
|
|
903
911
|
self.timeout_deco = evenlet_timeout_deco
|
|
904
|
-
self.logger.info(f'{self.consumer} 设置并发模式 {self.consumer.consumer_params.concurrent_mode}')
|
|
912
|
+
# self.logger.info(f'{self.consumer} 设置并发模式 {self.consumer.consumer_params.concurrent_mode}')
|
|
905
913
|
|
|
906
914
|
def check_all_concurrent_mode(self):
|
|
907
915
|
if GlobalVars.global_concurrent_mode is not None and \
|
|
908
916
|
self.consumer.consumer_params.concurrent_mode != GlobalVars.global_concurrent_mode:
|
|
909
917
|
# print({self.consumer._concurrent_mode, ConsumersManager.global_concurrent_mode})
|
|
910
918
|
if not {self.consumer.consumer_params.concurrent_mode, GlobalVars.global_concurrent_mode}.issubset({ConcurrentModeEnum.THREADING,
|
|
911
|
-
|
|
912
|
-
|
|
919
|
+
ConcurrentModeEnum.ASYNC,
|
|
920
|
+
ConcurrentModeEnum.SINGLE_THREAD}):
|
|
913
921
|
# threding、asyncio、solo 这几种模式可以共存。但同一个解释器不能同时选择 gevent + 其它并发模式,也不能 eventlet + 其它并发模式。
|
|
914
922
|
raise ValueError('''由于猴子补丁的原因,同一解释器中不可以设置两种并发类型,请查看显示的所有消费者的信息,
|
|
915
923
|
搜索 concurrent_mode 关键字,确保当前解释器内的所有消费者的并发模式只有一种(或可以共存),
|
|
@@ -12,7 +12,8 @@ from funboost.core.exceptions import BoostDecoParamsIsOldVersion
|
|
|
12
12
|
from funboost.core.func_params_model import BoosterParams, FunctionResultStatusPersistanceConfig, PriorityConsumingControlConfig
|
|
13
13
|
|
|
14
14
|
from funboost.factories.consumer_factory import get_consumer
|
|
15
|
-
|
|
15
|
+
if typing.TYPE_CHECKING:
|
|
16
|
+
from funboost.core.msg_result_getter import AsyncResult
|
|
16
17
|
|
|
17
18
|
class Booster:
|
|
18
19
|
"""
|
|
@@ -29,6 +30,7 @@ class Booster:
|
|
|
29
30
|
"""
|
|
30
31
|
@boost 这是funboost框架最重要的一个函数,必须看懂BoosterParams里面的入参有哪些。
|
|
31
32
|
pydatinc pycharm编程代码补全,请安装 pydantic插件, 在pycharm的 file -> settings -> Plugins -> 输入 pydantic 搜索,点击安装 pydantic 插件.
|
|
33
|
+
(高版本的pycharm pydantic是内置支持代码补全的,由此可见,pydantic太好了,pycharm官方都来支持)
|
|
32
34
|
|
|
33
35
|
强烈建议所有入参放在 BoosterParams() 中,不要直接在BoosterParams之外传参.现在是兼容老的直接在@boost中传参方式.
|
|
34
36
|
"""
|
|
@@ -106,16 +108,16 @@ class Booster:
|
|
|
106
108
|
else:
|
|
107
109
|
return self.consuming_function(*args, **kwargs)
|
|
108
110
|
|
|
109
|
-
def _safe_push(self, *func_args, **func_kwargs):
|
|
111
|
+
def _safe_push(self, *func_args, **func_kwargs) -> AsyncResult:
|
|
110
112
|
""" 多进程安全的,在fork多进程(非spawn多进程)情况下,有的包多进程不能共用一个连接,例如kafka"""
|
|
111
113
|
consumer = BoostersManager.get_or_create_booster_by_queue_name(self.queue_name).consumer
|
|
112
|
-
consumer.publisher_of_same_queue.push(*func_args, **func_kwargs)
|
|
114
|
+
return consumer.publisher_of_same_queue.push(*func_args, **func_kwargs)
|
|
113
115
|
|
|
114
116
|
def _safe_publish(self, msg: typing.Union[str, dict], task_id=None,
|
|
115
|
-
priority_control_config: PriorityConsumingControlConfig = None):
|
|
117
|
+
priority_control_config: PriorityConsumingControlConfig = None) -> AsyncResult:
|
|
116
118
|
""" 多进程安全的,在fork多进程(非spawn多进程)情况下,很多包跨线程/进程不能共享中间件连接,"""
|
|
117
119
|
consumer = BoostersManager.get_or_create_booster_by_queue_name(self.queue_name).consumer
|
|
118
|
-
consumer.publisher_of_same_queue.publish(msg=msg, task_id=task_id, priority_control_config=priority_control_config)
|
|
120
|
+
return consumer.publisher_of_same_queue.publish(msg=msg, task_id=task_id, priority_control_config=priority_control_config)
|
|
119
121
|
|
|
120
122
|
# noinspection PyMethodMayBeStatic
|
|
121
123
|
def multi_process_consume(self, process_num=1):
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import datetime
|
|
3
|
+
import functools
|
|
3
4
|
import json
|
|
4
5
|
import logging
|
|
5
6
|
import typing
|
|
6
7
|
from collections import OrderedDict
|
|
7
8
|
|
|
8
|
-
from funboost.concurrent_pool import FunboostBaseConcurrentPool
|
|
9
|
+
from funboost.concurrent_pool import FunboostBaseConcurrentPool, FlexibleThreadPool, ConcurrentPoolBuilder
|
|
9
10
|
from funboost.constant import ConcurrentModeEnum, BrokerEnum
|
|
10
|
-
from pydantic import BaseModel, validator, root_validator, BaseConfig
|
|
11
|
+
from pydantic import BaseModel, validator, root_validator, BaseConfig, Field
|
|
11
12
|
|
|
12
13
|
# noinspection PyUnresolvedReferences
|
|
13
14
|
from funboost.core.loggers import develop_logger
|
|
@@ -158,6 +159,7 @@ class BoosterParams(BaseJsonAbleModel):
|
|
|
158
159
|
user_custom_record_process_info_func: typing.Callable = None # 提供一个用户自定义的保存消息处理记录到某个地方例如mysql数据库的函数,函数仅仅接受一个入参,入参类型是 FunctionResultStatus,用户可以打印参数
|
|
159
160
|
|
|
160
161
|
is_using_rpc_mode: bool = False # 是否使用rpc模式,可以在发布端获取消费端的结果回调,但消耗一定性能,使用async_result.result时候会等待阻塞住当前线程。
|
|
162
|
+
rpc_result_expire_seconds: int = 600 # 保存rpc结果的过期时间.
|
|
161
163
|
|
|
162
164
|
is_support_remote_kill_task: bool = False # 是否支持远程任务杀死功能,如果任务数量少,单个任务耗时长,确实需要远程发送命令来杀死正在运行的函数,才设置为true,否则不建议开启此功能。
|
|
163
165
|
|
|
@@ -199,19 +201,22 @@ class BoosterParams(BaseJsonAbleModel):
|
|
|
199
201
|
|
|
200
202
|
class BoosterParamsComplete(BoosterParams):
|
|
201
203
|
"""
|
|
202
|
-
|
|
204
|
+
例如一个子类,这个BoosterParams的子类可以作为@booot的传参,每个@boost可以少写一些这些重复的入参字段.
|
|
203
205
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
永远是使用 amqpstorm包 操作 rabbbitmq作为消息队列.
|
|
206
|
+
function_result_status_persistance_conf 永远支持函数消费状态 结果状态持久化
|
|
207
|
+
is_send_consumer_hearbeat_to_redis 永远支持发送消费者的心跳到redis,便于统计分布式环境的活跃消费者
|
|
208
|
+
is_using_rpc_mode 永远支持rpc模式
|
|
209
|
+
broker_kind 永远是使用 amqpstorm包 操作 rabbbitmq作为消息队列.
|
|
210
|
+
specify_concurrent_pool 同一个进程的不同booster函数,共用一个线程池,线程资源利用更高.
|
|
208
211
|
"""
|
|
209
212
|
|
|
210
213
|
function_result_status_persistance_conf: FunctionResultStatusPersistanceConfig = FunctionResultStatusPersistanceConfig(
|
|
211
214
|
is_save_result=True, is_save_status=True, expire_seconds=7 * 24 * 3600, is_use_bulk_insert=True) # 开启函数消费状态 结果持久化到 mongo,为True用户必须要安装mongo和多浪费一丝丝性能.
|
|
212
215
|
is_send_consumer_hearbeat_to_redis: bool = True # 消费者心跳发到redis,为True那么用户必须安装reids
|
|
213
216
|
is_using_rpc_mode: bool = True # 固定支持rpc模式,不用每次指定 (不需要使用rpc模式的同学,就不要指定为True,必须安装redis和浪费一点性能)
|
|
217
|
+
rpc_result_expire_seconds: int = 1000
|
|
214
218
|
broker_kind: str = BrokerEnum.RABBITMQ_AMQPSTORM # 固定使用rabbitmq,不用每次指定
|
|
219
|
+
specify_concurrent_pool: FunboostBaseConcurrentPool = Field(default_factory=functools.partial(ConcurrentPoolBuilder.get_pool, FlexibleThreadPool, 500)) # 多个消费函数共享线程池
|
|
215
220
|
|
|
216
221
|
|
|
217
222
|
class PriorityConsumingControlConfig(BaseJsonAbleModel):
|
|
@@ -44,7 +44,7 @@ class AsyncResult(RedisMixin):
|
|
|
44
44
|
status_and_result_str = redis_value[1]
|
|
45
45
|
self._status_and_result = json.loads(status_and_result_str)
|
|
46
46
|
self.redis_db_filter_and_rpc_result.lpush(self.task_id, status_and_result_str)
|
|
47
|
-
self.redis_db_filter_and_rpc_result.expire(self.task_id,
|
|
47
|
+
self.redis_db_filter_and_rpc_result.expire(self.task_id, self._status_and_result['rpc_result_expire_seconds'])
|
|
48
48
|
return self._status_and_result
|
|
49
49
|
return None
|
|
50
50
|
return self._status_and_result
|
|
@@ -149,7 +149,7 @@ if __name__ == '__main__':
|
|
|
149
149
|
status_and_result_str = redis_value[1]
|
|
150
150
|
self._status_and_result = json.loads(status_and_result_str)
|
|
151
151
|
await self.aioredis_db_filter_and_rpc_result.lpush(self.task_id, status_and_result_str)
|
|
152
|
-
await self.aioredis_db_filter_and_rpc_result.expire(self.task_id,
|
|
152
|
+
await self.aioredis_db_filter_and_rpc_result.expire(self.task_id, self._status_and_result['rpc_result_expire_seconds'])
|
|
153
153
|
return self._status_and_result
|
|
154
154
|
return None
|
|
155
155
|
return self._status_and_result
|
|
@@ -135,7 +135,7 @@ def use_config_form_funboost_config_module():
|
|
|
135
135
|
# nb_print(m.__dict__.items())
|
|
136
136
|
only_print_on_main_process(f'分布式函数调度框架 读取到\n "{m.__file__}:1" 文件里面的变量作为优先配置了\n')
|
|
137
137
|
if not hasattr(m,'BrokerConnConfig'):
|
|
138
|
-
raise EnvironmentError(f'funboost 30.0版本升级了配置文件,中间件配置写成了类,请删除原来老的funboost_config.py
|
|
138
|
+
raise EnvironmentError(f'funboost 30.0版本升级了配置文件,中间件配置写成了类,请删除原来老的funboost_config.py配置文件:\n "{m.__file__}:1"')
|
|
139
139
|
funboost_config_deafult.BrokerConnConfig.update_cls_attribute(**m.BrokerConnConfig().get_dict())
|
|
140
140
|
funboost_config_deafult.FunboostCommonConfig.update_cls_attribute(**m.FunboostCommonConfig().get_dict())
|
|
141
141
|
# funboost_config_deafult.BoostDecoratorDefaultParams.update_cls_attribute(**m.BoostDecoratorDefaultParams().get_dict())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: funboost
|
|
3
|
-
Version: 41.
|
|
3
|
+
Version: 41.2
|
|
4
4
|
Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持celery框架整体作为funboost中间件,python函数加速器,框架包罗万象,一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 方便 快速 强大,相见恨晚
|
|
5
5
|
Home-page: https://github.com/ydf0509/funboost
|
|
6
6
|
Author: bfzs
|
|
@@ -36,6 +36,7 @@ funboost/concurrent_pool/custom_threadpool_executor.py
|
|
|
36
36
|
funboost/concurrent_pool/custom_threadpool_executor000.py
|
|
37
37
|
funboost/concurrent_pool/fixed_thread_pool.py
|
|
38
38
|
funboost/concurrent_pool/flexible_thread_pool.py
|
|
39
|
+
funboost/concurrent_pool/pool_commons.py
|
|
39
40
|
funboost/concurrent_pool/single_thread_executor.py
|
|
40
41
|
funboost/concurrent_pool/backup/__init__.py
|
|
41
42
|
funboost/concurrent_pool/backup/async_pool_executor0223.py
|
|
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-41.0 → funboost-41.2}/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-41.0 → funboost-41.2}/funboost/concurrent_pool/backup/async_pool_executor_janus.py
RENAMED
|
File without changes
|
|
File without changes
|
{funboost-41.0 → funboost-41.2}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{funboost-41.0 → funboost-41.2}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|