funboost 48.8__tar.gz → 48.9__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.

Files changed (343) hide show
  1. {funboost-48.8/funboost.egg-info → funboost-48.9}/PKG-INFO +98 -97
  2. {funboost-48.8 → funboost-48.9}/README.md +96 -8
  3. {funboost-48.8 → funboost-48.9}/funboost/__init__.py +1 -1
  4. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/custom_threadpool_executor.py +1 -1
  5. {funboost-48.8 → funboost-48.9}/funboost/constant.py +16 -2
  6. {funboost-48.8 → funboost-48.9}/funboost/consumers/base_consumer.py +38 -25
  7. {funboost-48.8 → funboost-48.9}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +5 -0
  8. {funboost-48.8 → funboost-48.9}/funboost/core/active_cousumer_info_getter.py +47 -7
  9. {funboost-48.8 → funboost-48.9}/funboost/core/booster.py +1 -0
  10. {funboost-48.8 → funboost-48.9}/funboost/core/current_task.py +17 -0
  11. {funboost-48.8 → funboost-48.9}/funboost/core/func_params_model.py +21 -17
  12. {funboost-48.8 → funboost-48.9}/funboost/core/loggers.py +1 -0
  13. {funboost-48.8 → funboost-48.9}/funboost/funboost_config_deafult.py +1 -1
  14. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
  15. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
  16. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/__pycache__/functions.cpython-39.pyc +0 -0
  17. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/app_debug_start.py +1 -1
  18. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/functions.py +10 -1
  19. funboost-48.9/funboost/function_result_web/static/js/form-memory.js +92 -0
  20. funboost-48.9/funboost/function_result_web/static/js_cdn/chart.js +20 -0
  21. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/index.html +31 -1
  22. funboost-48.9/funboost/function_result_web/templates/queue_op.html +895 -0
  23. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/rpc_call.html +51 -37
  24. {funboost-48.8 → funboost-48.9}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +1 -1
  25. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +1 -1
  26. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/readme.md +1 -1
  27. {funboost-48.8 → funboost-48.9/funboost.egg-info}/PKG-INFO +98 -97
  28. {funboost-48.8 → funboost-48.9}/funboost.egg-info/SOURCES.txt +2 -1
  29. funboost-48.8/funboost/function_result_web/templates/index_/344/270/215/345/217/257/346/212/230/345/217/240.html +0 -153
  30. funboost-48.8/funboost/function_result_web/templates/queue_op.html +0 -504
  31. {funboost-48.8 → funboost-48.9}/LICENSE +0 -0
  32. {funboost-48.8 → funboost-48.9}/MANIFEST.in +0 -0
  33. {funboost-48.8 → funboost-48.9}/funboost/__init__old.py +0 -0
  34. {funboost-48.8 → funboost-48.9}/funboost/__main__.py +0 -0
  35. {funboost-48.8 → funboost-48.9}/funboost/assist/__init__.py +0 -0
  36. {funboost-48.8 → funboost-48.9}/funboost/assist/celery_helper.py +0 -0
  37. {funboost-48.8 → funboost-48.9}/funboost/assist/dramatiq_helper.py +0 -0
  38. {funboost-48.8 → funboost-48.9}/funboost/assist/faststream_helper.py +0 -0
  39. {funboost-48.8 → funboost-48.9}/funboost/assist/huey_helper.py +0 -0
  40. {funboost-48.8 → funboost-48.9}/funboost/assist/rocketry_helper.py +0 -0
  41. {funboost-48.8 → funboost-48.9}/funboost/assist/rq_helper.py +0 -0
  42. {funboost-48.8 → funboost-48.9}/funboost/assist/rq_windows_worker.py +0 -0
  43. {funboost-48.8 → funboost-48.9}/funboost/assist/taskiq_helper.py +0 -0
  44. {funboost-48.8 → funboost-48.9}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
  45. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/__init__.py +0 -0
  46. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/async_helper.py +0 -0
  47. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/async_pool_executor.py +0 -0
  48. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/backup/__init__.py +0 -0
  49. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
  50. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
  51. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
  52. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/backup/grok_async_pool.py +0 -0
  53. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/base_pool_type.py +0 -0
  54. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
  55. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
  56. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
  57. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
  58. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
  59. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
  60. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
  61. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
  62. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
  63. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/pool_commons.py +0 -0
  64. {funboost-48.8 → funboost-48.9}/funboost/concurrent_pool/single_thread_executor.py +0 -0
  65. {funboost-48.8 → funboost-48.9}/funboost/consumers/__init__.py +0 -0
  66. {funboost-48.8 → funboost-48.9}/funboost/consumers/celery_consumer.py +0 -0
  67. {funboost-48.8 → funboost-48.9}/funboost/consumers/confirm_mixin.py +0 -0
  68. {funboost-48.8 → funboost-48.9}/funboost/consumers/dramatiq_consumer.py +0 -0
  69. {funboost-48.8 → funboost-48.9}/funboost/consumers/empty_consumer.py +0 -0
  70. {funboost-48.8 → funboost-48.9}/funboost/consumers/faststream_consumer.py +0 -0
  71. {funboost-48.8 → funboost-48.9}/funboost/consumers/http_consumer.py +0 -0
  72. {funboost-48.8 → funboost-48.9}/funboost/consumers/http_consumer000.py +0 -0
  73. {funboost-48.8 → funboost-48.9}/funboost/consumers/httpsqs_consumer.py +0 -0
  74. {funboost-48.8 → funboost-48.9}/funboost/consumers/huey_consumer.py +0 -0
  75. {funboost-48.8 → funboost-48.9}/funboost/consumers/kafka_consumer.py +0 -0
  76. {funboost-48.8 → funboost-48.9}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
  77. {funboost-48.8 → funboost-48.9}/funboost/consumers/kombu_consumer.py +0 -0
  78. {funboost-48.8 → funboost-48.9}/funboost/consumers/local_python_queue_consumer.py +0 -0
  79. {funboost-48.8 → funboost-48.9}/funboost/consumers/memory_deque_consumer.py +0 -0
  80. {funboost-48.8 → funboost-48.9}/funboost/consumers/mongomq_consumer.py +0 -0
  81. {funboost-48.8 → funboost-48.9}/funboost/consumers/mqtt_consumer.py +0 -0
  82. {funboost-48.8 → funboost-48.9}/funboost/consumers/nameko_consumer.py +0 -0
  83. {funboost-48.8 → funboost-48.9}/funboost/consumers/nats_consumer.py +0 -0
  84. {funboost-48.8 → funboost-48.9}/funboost/consumers/nsq_consumer.py +0 -0
  85. {funboost-48.8 → funboost-48.9}/funboost/consumers/peewee_conusmer.py +0 -0
  86. {funboost-48.8 → funboost-48.9}/funboost/consumers/persist_queue_consumer.py +0 -0
  87. {funboost-48.8 → funboost-48.9}/funboost/consumers/pulsar_consumer.py +0 -0
  88. {funboost-48.8 → funboost-48.9}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
  89. {funboost-48.8 → funboost-48.9}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
  90. {funboost-48.8 → funboost-48.9}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
  91. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
  92. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_consumer.py +0 -0
  93. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_consumer_ack_able.py +0 -0
  94. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_consumer_ack_using_timeout.py +0 -0
  95. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_consumer_priority.py +0 -0
  96. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_consumer_simple.py +0 -0
  97. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_filter.py +0 -0
  98. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_pubsub_consumer.py +0 -0
  99. {funboost-48.8 → funboost-48.9}/funboost/consumers/redis_stream_consumer.py +0 -0
  100. {funboost-48.8 → funboost-48.9}/funboost/consumers/rocketmq_consumer.py +0 -0
  101. {funboost-48.8 → funboost-48.9}/funboost/consumers/rq_consumer.py +0 -0
  102. {funboost-48.8 → funboost-48.9}/funboost/consumers/sqlachemy_consumer.py +0 -0
  103. {funboost-48.8 → funboost-48.9}/funboost/consumers/tcp_consumer.py +0 -0
  104. {funboost-48.8 → funboost-48.9}/funboost/consumers/txt_file_consumer.py +0 -0
  105. {funboost-48.8 → funboost-48.9}/funboost/consumers/udp_consumer.py +0 -0
  106. {funboost-48.8 → funboost-48.9}/funboost/consumers/zeromq_consumer.py +0 -0
  107. {funboost-48.8 → funboost-48.9}/funboost/contrib/__init__.py +0 -0
  108. {funboost-48.8 → funboost-48.9}/funboost/contrib/api_publish_msg.py +0 -0
  109. {funboost-48.8 → funboost-48.9}/funboost/contrib/django_db_deco.py +0 -0
  110. {funboost-48.8 → funboost-48.9}/funboost/contrib/queue2queue.py +0 -0
  111. {funboost-48.8 → funboost-48.9}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
  112. {funboost-48.8 → funboost-48.9}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
  113. {funboost-48.8 → funboost-48.9}/funboost/core/__init__.py +0 -0
  114. {funboost-48.8 → funboost-48.9}/funboost/core/cli/__init__.py +0 -0
  115. {funboost-48.8 → funboost-48.9}/funboost/core/cli/discovery_boosters.py +0 -0
  116. {funboost-48.8 → funboost-48.9}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
  117. {funboost-48.8 → funboost-48.9}/funboost/core/cli/funboost_fire.py +0 -0
  118. {funboost-48.8 → funboost-48.9}/funboost/core/exceptions.py +0 -0
  119. {funboost-48.8 → funboost-48.9}/funboost/core/fabric_deploy_helper.py +0 -0
  120. {funboost-48.8 → funboost-48.9}/funboost/core/funboost_config_getter.py +0 -0
  121. {funboost-48.8 → funboost-48.9}/funboost/core/funboost_time.py +0 -0
  122. {funboost-48.8 → funboost-48.9}/funboost/core/function_result_status_config.py +0 -0
  123. {funboost-48.8 → funboost-48.9}/funboost/core/function_result_status_saver.py +0 -0
  124. {funboost-48.8 → funboost-48.9}/funboost/core/helper_funs.py +0 -0
  125. {funboost-48.8 → funboost-48.9}/funboost/core/kill_remote_task.py +0 -0
  126. {funboost-48.8 → funboost-48.9}/funboost/core/lazy_impoter.py +0 -0
  127. {funboost-48.8 → funboost-48.9}/funboost/core/msg_result_getter.py +0 -0
  128. {funboost-48.8 → funboost-48.9}/funboost/core/muliti_process_enhance.py +0 -0
  129. {funboost-48.8 → funboost-48.9}/funboost/core/serialization.py +0 -0
  130. {funboost-48.8 → funboost-48.9}/funboost/core/task_id_logger.py +0 -0
  131. {funboost-48.8 → funboost-48.9}/funboost/factories/__init__.py +0 -0
  132. {funboost-48.8 → funboost-48.9}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
  133. {funboost-48.8 → funboost-48.9}/funboost/factories/consumer_factory.py +0 -0
  134. {funboost-48.8 → funboost-48.9}/funboost/factories/publisher_factotry.py +0 -0
  135. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/__pycache__/app.cpython-39.pyc +0 -0
  136. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/app.py +0 -0
  137. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/assets/css/custom.css +0 -0
  138. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
  139. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
  140. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/assets/js/custom.js +0 -0
  141. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
  142. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css/content_page_style.css +0 -0
  143. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css/style.css +0 -0
  144. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css +0 -0
  145. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/css/font-awesome.min.css +0 -0
  146. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/FontAwesome.otf +0 -0
  147. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.eot +0 -0
  148. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.svg +0 -0
  149. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.ttf +0 -0
  150. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.woff +0 -0
  151. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
  152. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/select2/4.0.13/css/select2.min.css +0 -0
  153. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/tabulator-tables@5.5.0/tabulator.min.css +0 -0
  154. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/tabulator-tables@5.5.0/tabulator_bootstrap3.min.css +0 -0
  155. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/css/bootstrap.min.css +0 -0
  156. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot +0 -0
  157. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.svg +0 -0
  158. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf +0 -0
  159. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff +0 -0
  160. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/css_cdn/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff2 +0 -0
  161. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/images/bg.jpg +0 -0
  162. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/images/favicon.ico +0 -0
  163. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/images/password.png +0 -0
  164. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/images/tick.png +0 -0
  165. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/images/user.png +0 -0
  166. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/js/bootstrap-datetimepicker.min.js +0 -0
  167. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/js/echarts.min.js +0 -0
  168. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
  169. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/js/moment-with-locales.min.js +0 -0
  170. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/js/select2.min.js +0 -0
  171. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/js_cdn/bootstrap/3.3.7/js/bootstrap.min.js +0 -0
  172. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/static/js_cdn/tabulator-tables@5.5.0/dist/js/tabulator.min.js +0 -0
  173. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/about.html +0 -0
  174. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/conusme_speed.html +0 -0
  175. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/fun_result_table.html +0 -0
  176. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/index_backup.html +0 -0
  177. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/login.html +0 -0
  178. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/running_consumer_by_ip.html +0 -0
  179. {funboost-48.8 → funboost-48.9}/funboost/function_result_web/templates/running_consumer_by_queue_name.html +0 -0
  180. {funboost-48.8 → funboost-48.9}/funboost/publishers/__init__.py +0 -0
  181. {funboost-48.8 → funboost-48.9}/funboost/publishers/base_publisher.py +0 -0
  182. {funboost-48.8 → funboost-48.9}/funboost/publishers/celery_publisher.py +0 -0
  183. {funboost-48.8 → funboost-48.9}/funboost/publishers/celery_publisher000.py +0 -0
  184. {funboost-48.8 → funboost-48.9}/funboost/publishers/confluent_kafka_publisher.py +0 -0
  185. {funboost-48.8 → funboost-48.9}/funboost/publishers/dramatiq_publisher.py +0 -0
  186. {funboost-48.8 → funboost-48.9}/funboost/publishers/empty_publisher.py +0 -0
  187. {funboost-48.8 → funboost-48.9}/funboost/publishers/faststream_publisher.py +0 -0
  188. {funboost-48.8 → funboost-48.9}/funboost/publishers/http_publisher.py +0 -0
  189. {funboost-48.8 → funboost-48.9}/funboost/publishers/httpsqs_publisher.py +0 -0
  190. {funboost-48.8 → funboost-48.9}/funboost/publishers/huey_publisher.py +0 -0
  191. {funboost-48.8 → funboost-48.9}/funboost/publishers/kafka_publisher.py +0 -0
  192. {funboost-48.8 → funboost-48.9}/funboost/publishers/kombu_publisher.py +0 -0
  193. {funboost-48.8 → funboost-48.9}/funboost/publishers/local_python_queue_publisher.py +0 -0
  194. {funboost-48.8 → funboost-48.9}/funboost/publishers/meomory_deque_publisher.py +0 -0
  195. {funboost-48.8 → funboost-48.9}/funboost/publishers/mongomq_publisher.py +0 -0
  196. {funboost-48.8 → funboost-48.9}/funboost/publishers/mqtt_publisher.py +0 -0
  197. {funboost-48.8 → funboost-48.9}/funboost/publishers/nameko_publisher.py +0 -0
  198. {funboost-48.8 → funboost-48.9}/funboost/publishers/nats_publisher.py +0 -0
  199. {funboost-48.8 → funboost-48.9}/funboost/publishers/nsq_publisher.py +0 -0
  200. {funboost-48.8 → funboost-48.9}/funboost/publishers/peewee_publisher.py +0 -0
  201. {funboost-48.8 → funboost-48.9}/funboost/publishers/persist_queue_publisher.py +0 -0
  202. {funboost-48.8 → funboost-48.9}/funboost/publishers/pulsar_publisher.py +0 -0
  203. {funboost-48.8 → funboost-48.9}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
  204. {funboost-48.8 → funboost-48.9}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
  205. {funboost-48.8 → funboost-48.9}/funboost/publishers/redis_publisher.py +0 -0
  206. {funboost-48.8 → funboost-48.9}/funboost/publishers/redis_publisher_lpush.py +0 -0
  207. {funboost-48.8 → funboost-48.9}/funboost/publishers/redis_publisher_priority.py +0 -0
  208. {funboost-48.8 → funboost-48.9}/funboost/publishers/redis_publisher_simple.py +0 -0
  209. {funboost-48.8 → funboost-48.9}/funboost/publishers/redis_pubsub_publisher.py +0 -0
  210. {funboost-48.8 → funboost-48.9}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
  211. {funboost-48.8 → funboost-48.9}/funboost/publishers/redis_stream_publisher.py +0 -0
  212. {funboost-48.8 → funboost-48.9}/funboost/publishers/rocketmq_publisher.py +0 -0
  213. {funboost-48.8 → funboost-48.9}/funboost/publishers/rq_publisher.py +0 -0
  214. {funboost-48.8 → funboost-48.9}/funboost/publishers/sqla_queue_publisher.py +0 -0
  215. {funboost-48.8 → funboost-48.9}/funboost/publishers/tcp_publisher.py +0 -0
  216. {funboost-48.8 → funboost-48.9}/funboost/publishers/txt_file_publisher.py +0 -0
  217. {funboost-48.8 → funboost-48.9}/funboost/publishers/udp_publisher.py +0 -0
  218. {funboost-48.8 → funboost-48.9}/funboost/publishers/zeromq_publisher.py +0 -0
  219. {funboost-48.8 → funboost-48.9}/funboost/queues/__init__.py +0 -0
  220. {funboost-48.8 → funboost-48.9}/funboost/queues/memory_queues_map.py +0 -0
  221. {funboost-48.8 → funboost-48.9}/funboost/queues/peewee_queue.py +0 -0
  222. {funboost-48.8 → funboost-48.9}/funboost/queues/sqla_queue.py +0 -0
  223. {funboost-48.8 → funboost-48.9}/funboost/set_frame_config.py +0 -0
  224. {funboost-48.8 → funboost-48.9}/funboost/timing_job/__init__.py +0 -0
  225. {funboost-48.8 → funboost-48.9}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
  226. {funboost-48.8 → funboost-48.9}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
  227. {funboost-48.8 → funboost-48.9}/funboost/timing_job/timing_job_base.py +0 -0
  228. {funboost-48.8 → funboost-48.9}/funboost/timing_job/timing_push.py +0 -0
  229. {funboost-48.8 → funboost-48.9}/funboost/utils/__init__.py +0 -0
  230. {funboost-48.8 → funboost-48.9}/funboost/utils/apscheduler_monkey.py +0 -0
  231. {funboost-48.8 → funboost-48.9}/funboost/utils/block_exit.py +0 -0
  232. {funboost-48.8 → funboost-48.9}/funboost/utils/bulk_operation.py +0 -0
  233. {funboost-48.8 → funboost-48.9}/funboost/utils/class_utils.py +0 -0
  234. {funboost-48.8 → funboost-48.9}/funboost/utils/class_utils2.py +0 -0
  235. {funboost-48.8 → funboost-48.9}/funboost/utils/ctrl_c_end.py +0 -0
  236. {funboost-48.8 → funboost-48.9}/funboost/utils/custom_pysnooper.py +0 -0
  237. {funboost-48.8 → funboost-48.9}/funboost/utils/decorators.py +0 -0
  238. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages/__init__.py +0 -0
  239. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
  240. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
  241. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
  242. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
  243. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
  244. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
  245. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
  246. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
  247. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-313.pyc +0 -0
  248. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
  249. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
  250. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
  251. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-313.pyc +0 -0
  252. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
  253. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
  254. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
  255. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
  256. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
  257. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
  258. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
  259. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
  260. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
  261. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
  262. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
  263. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
  264. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
  265. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
  266. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
  267. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
  268. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
  269. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
  270. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
  271. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
  272. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
  273. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
  274. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
  275. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
  276. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
  277. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
  278. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
  279. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
  280. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
  281. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
  282. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
  283. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
  284. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
  285. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
  286. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
  287. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
  288. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
  289. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
  290. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
  291. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
  292. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
  293. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
  294. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
  295. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
  296. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
  297. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
  298. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
  299. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
  300. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
  301. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
  302. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
  303. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
  304. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc2222.py +0 -0
  305. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
  306. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
  307. {funboost-48.8 → funboost-48.9}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
  308. {funboost-48.8 → funboost-48.9}/funboost/utils/develop_log.py +0 -0
  309. {funboost-48.8 → funboost-48.9}/funboost/utils/expire_lock.py +0 -0
  310. {funboost-48.8 → funboost-48.9}/funboost/utils/func_timeout/StoppableThread.py +0 -0
  311. {funboost-48.8 → funboost-48.9}/funboost/utils/func_timeout/__init__.py +0 -0
  312. {funboost-48.8 → funboost-48.9}/funboost/utils/func_timeout/dafunc.py +0 -0
  313. {funboost-48.8 → funboost-48.9}/funboost/utils/func_timeout/exceptions.py +0 -0
  314. {funboost-48.8 → funboost-48.9}/funboost/utils/func_timeout/py2_raise.py +0 -0
  315. {funboost-48.8 → funboost-48.9}/funboost/utils/func_timeout/py3_raise.py +0 -0
  316. {funboost-48.8 → funboost-48.9}/funboost/utils/json_helper.py +0 -0
  317. {funboost-48.8 → funboost-48.9}/funboost/utils/mongo_util.py +0 -0
  318. {funboost-48.8 → funboost-48.9}/funboost/utils/monkey_color_log.py +0 -0
  319. {funboost-48.8 → funboost-48.9}/funboost/utils/monkey_patches.py +0 -0
  320. {funboost-48.8 → funboost-48.9}/funboost/utils/mqtt_util.py +0 -0
  321. {funboost-48.8 → funboost-48.9}/funboost/utils/paramiko_util.py +0 -0
  322. {funboost-48.8 → funboost-48.9}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
  323. {funboost-48.8 → funboost-48.9}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
  324. {funboost-48.8 → funboost-48.9}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
  325. {funboost-48.8 → funboost-48.9}/funboost/utils/pysnooper_ydf/utils.py +0 -0
  326. {funboost-48.8 → funboost-48.9}/funboost/utils/pysnooper_ydf/variables.py +0 -0
  327. {funboost-48.8 → funboost-48.9}/funboost/utils/rabbitmq_factory.py +0 -0
  328. {funboost-48.8 → funboost-48.9}/funboost/utils/redis_manager.py +0 -0
  329. {funboost-48.8 → funboost-48.9}/funboost/utils/redis_manager_old.py +0 -0
  330. {funboost-48.8 → funboost-48.9}/funboost/utils/resource_monitoring.py +0 -0
  331. {funboost-48.8 → funboost-48.9}/funboost/utils/restart_python.py +0 -0
  332. {funboost-48.8 → funboost-48.9}/funboost/utils/simple_data_class.py +0 -0
  333. {funboost-48.8 → funboost-48.9}/funboost/utils/str_utils.py +0 -0
  334. {funboost-48.8 → funboost-48.9}/funboost/utils/time_util.py +0 -0
  335. {funboost-48.8 → funboost-48.9}/funboost/utils/times/__init__.py +0 -0
  336. {funboost-48.8 → funboost-48.9}/funboost/utils/times/version.py +0 -0
  337. {funboost-48.8 → funboost-48.9}/funboost/utils/un_strict_json_dumps.py +0 -0
  338. {funboost-48.8 → funboost-48.9}/funboost.egg-info/dependency_links.txt +0 -0
  339. {funboost-48.8 → funboost-48.9}/funboost.egg-info/entry_points.txt +0 -0
  340. {funboost-48.8 → funboost-48.9}/funboost.egg-info/requires.txt +0 -0
  341. {funboost-48.8 → funboost-48.9}/funboost.egg-info/top_level.txt +0 -0
  342. {funboost-48.8 → funboost-48.9}/setup.cfg +0 -0
  343. {funboost-48.8 → funboost-48.9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 48.8
3
+ Version: 48.9
4
4
  Summary: pip install funboost,python全功能分布式函数调度框架,funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,funboost web manager 方便查看和管理消费函数;99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
5
5
  Home-page: https://github.com/ydf0509/funboost
6
6
  Author: bfzs
@@ -26,97 +26,10 @@ Classifier: Programming Language :: Python :: 3.12
26
26
  Classifier: Programming Language :: Python :: 3 :: Only
27
27
  Classifier: Topic :: Software Development :: Libraries
28
28
  Description-Content-Type: text/markdown
29
- License-File: LICENSE
30
- Requires-Dist: nb_log>=13.2
31
- Requires-Dist: nb_libs>=1.8
32
- Requires-Dist: nb_time>=2.4
33
- Requires-Dist: pymongo>=4.6.3
34
- Requires-Dist: AMQPStorm==2.10.6
35
- Requires-Dist: rabbitpy==2.0.1
36
- Requires-Dist: decorator==5.1.1
37
- Requires-Dist: tomorrow3==1.1.0
38
- Requires-Dist: persist-queue>=0.4.2
39
- Requires-Dist: apscheduler<4.0.0,>=3.10.1
40
- Requires-Dist: pikav0
41
- Requires-Dist: pikav1
42
- Requires-Dist: redis2
43
- Requires-Dist: redis3
44
- Requires-Dist: redis5
45
- Requires-Dist: redis
46
- Requires-Dist: setuptools_rust
47
- Requires-Dist: fabric2>=2.6.0
48
- Requires-Dist: nb_filelock
49
- Requires-Dist: pysnooper
50
- Requires-Dist: deprecated
51
- Requires-Dist: cryptography
52
- Requires-Dist: auto_run_on_remote
53
- Requires-Dist: frozenlist
54
- Requires-Dist: fire
55
- Requires-Dist: pydantic
56
- Requires-Dist: orjson
57
- Requires-Dist: async-timeout
58
- Requires-Dist: typing-extensions
59
29
  Provides-Extra: all
60
- Requires-Dist: confluent_kafka==1.7.0; extra == "all"
61
- Requires-Dist: pulsar-client==3.1.0; python_version >= "3.7" and extra == "all"
62
- Requires-Dist: celery; extra == "all"
63
- Requires-Dist: flower; extra == "all"
64
- Requires-Dist: nameko==2.14.1; extra == "all"
65
- Requires-Dist: sqlalchemy==1.4.13; extra == "all"
66
- Requires-Dist: sqlalchemy_utils==0.36.1; extra == "all"
67
- Requires-Dist: dramatiq==1.14.2; extra == "all"
68
- Requires-Dist: huey==2.4.5; extra == "all"
69
- Requires-Dist: rq==1.15.0; extra == "all"
70
- Requires-Dist: kombu; extra == "all"
71
- Requires-Dist: eventlet==0.33.3; extra == "all"
72
- Requires-Dist: gevent==22.10.2; extra == "all"
73
- Requires-Dist: elasticsearch; extra == "all"
74
- Requires-Dist: gnsq==1.0.1; extra == "all"
75
- Requires-Dist: psutil; extra == "all"
76
- Requires-Dist: peewee==3.17.3; extra == "all"
77
- Requires-Dist: nats-python; extra == "all"
78
- Requires-Dist: aiohttp==3.8.3; extra == "all"
79
- Requires-Dist: paho-mqtt; extra == "all"
80
- Requires-Dist: rocketmq; extra == "all"
81
- Requires-Dist: zmq; extra == "all"
82
- Requires-Dist: pyzmq; extra == "all"
83
- Requires-Dist: kafka-python==2.0.2; extra == "all"
84
- Requires-Dist: flask; extra == "all"
85
- Requires-Dist: flask_bootstrap; extra == "all"
86
- Requires-Dist: flask_wtf; extra == "all"
87
- Requires-Dist: wtforms; extra == "all"
88
- Requires-Dist: flask_login; extra == "all"
89
- Provides-Extra: extra-brokers
90
- Requires-Dist: confluent_kafka==1.7.0; extra == "extra-brokers"
91
- Requires-Dist: pulsar-client==3.1.0; python_version >= "3.7" and extra == "extra-brokers"
92
- Requires-Dist: celery; extra == "extra-brokers"
93
- Requires-Dist: flower; extra == "extra-brokers"
94
- Requires-Dist: nameko==2.14.1; extra == "extra-brokers"
95
- Requires-Dist: sqlalchemy==1.4.13; extra == "extra-brokers"
96
- Requires-Dist: sqlalchemy_utils==0.36.1; extra == "extra-brokers"
97
- Requires-Dist: dramatiq==1.14.2; extra == "extra-brokers"
98
- Requires-Dist: huey==2.4.5; extra == "extra-brokers"
99
- Requires-Dist: rq==1.15.0; extra == "extra-brokers"
100
- Requires-Dist: kombu; extra == "extra-brokers"
101
- Requires-Dist: eventlet==0.33.3; extra == "extra-brokers"
102
- Requires-Dist: gevent==22.10.2; extra == "extra-brokers"
103
- Requires-Dist: elasticsearch; extra == "extra-brokers"
104
- Requires-Dist: gnsq==1.0.1; extra == "extra-brokers"
105
- Requires-Dist: psutil; extra == "extra-brokers"
106
- Requires-Dist: peewee==3.17.3; extra == "extra-brokers"
107
- Requires-Dist: nats-python; extra == "extra-brokers"
108
- Requires-Dist: aiohttp==3.8.3; extra == "extra-brokers"
109
- Requires-Dist: paho-mqtt; extra == "extra-brokers"
110
- Requires-Dist: rocketmq; extra == "extra-brokers"
111
- Requires-Dist: zmq; extra == "extra-brokers"
112
- Requires-Dist: pyzmq; extra == "extra-brokers"
113
- Requires-Dist: kafka-python==2.0.2; extra == "extra-brokers"
30
+ Provides-Extra: extra_brokers
114
31
  Provides-Extra: flask
115
- Requires-Dist: flask; extra == "flask"
116
- Requires-Dist: flask_bootstrap; extra == "flask"
117
- Requires-Dist: flask_wtf; extra == "flask"
118
- Requires-Dist: wtforms; extra == "flask"
119
- Requires-Dist: flask_login; extra == "flask"
32
+ License-File: LICENSE
120
33
 
121
34
 
122
35
 
@@ -138,6 +51,8 @@ Requires-Dist: flask_login; extra == "flask"
138
51
  pip install funboost ,python全功能分布式函数调度框架。 demo用法例子见文档1.3
139
52
 
140
53
  funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。
54
+ funboost的神奇之处在于它同时拥有"轻量级使用方式"和"重量级功能集",完全颠覆了"功能强大=使用复杂"的传统思维。
55
+ 它证明了一个框架可以既功能丰富又极其易用,这是对传统Python框架设计的一次巧妙超越。
141
56
 
142
57
  只需要一行@boost代码即可分布式执行python一切任意函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
143
58
  支持python所有类型的并发模式,消息队列方面支持全球一切知名消息队列中间件和模拟的实现消息队列,
@@ -145,7 +60,11 @@ funboost的功能是全面性重量级,用户能想得到的功能99%全都有
145
60
  也支持huey dramatiq rq等任务队列框架作为funboost的broker。
146
61
 
147
62
  python函数加速器,框架包罗万象,一统编程思维,兼容50% python编程业务场景,适用范围广。
148
- python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件(或任务队列框架),
63
+ python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件
64
+ (不仅支持几乎所有你能想到的消息队列中间件,还支持本地磁盘队列、数据库队列 (SQLAlchemy, Peewee)、
65
+ 内存队列、甚至是 HTTP 请求、WebSocket 等作为任务队列,甚至是将 Celery、Dramatiq、Huey 等其他框架整体作为其 Broker。
66
+ funboost源码高扩展性的设计,造成“万物皆可为Broker”,并不是有30种传统意义上的经典消息队列,
67
+ 因为世界上总共都没有30种知名的经典消息队列),
149
68
  30种任务控制功能。给任意python函数赋能。
150
69
  用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
151
70
 
@@ -191,9 +110,41 @@ funboost的旧框架名字是function_scheduling_distributed_framework , 关系
191
110
  ### 1.0.1 [分布式函数调度框架文档地址 ](https://funboost.readthedocs.io/zh-cn/latest/index.html)
192
111
  [查看分布式函数调度框架文档 https://funboost.readthedocs.io/zh-cn/latest/index.html](https://funboost.readthedocs.io/zh-cn/latest/index.html)
193
112
 
113
+ 文档很长,大部分都是讲原理和对比各种框架。但是用户只需要学习1.3这1个例子就能掌握了。因为其他例子只是 @boost的 BoosterParams 里面的控制入参换了一下。
194
114
 
195
-
196
- [funboost依赖的nb_log日志文档 https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2](https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2)
115
+ 用户只需要专门看 BoosterParams 里面的每个入参的注释就能掌握框架了,因为funboost只有@boost一行代码需要你写。
116
+
117
+ funboost 框架和一般的框架不一样,因为只有一行代码需要掌握,绝对不是要求用户先精通框架本身才能自由发挥。
118
+
119
+ #### [1.python万能分布式函数调度框架简funboost简介](https://funboost.readthedocs.io/zh-cn/latest/articles/c1.html)
120
+ #### [2. funboost对比celery框架](https://funboost.readthedocs.io/zh-cn/latest/articles/c2.html)
121
+
122
+ #### [3.funboost框架详细介绍](https://funboost.readthedocs.io/zh-cn/latest/articles/c3.html)
123
+
124
+ #### [4.funboost使用框架的各种代码示例](https://funboost.readthedocs.io/zh-cn/latest/articles/c4.html)
125
+
126
+ #### [4b.funboost使用框架的各种代码示例(高级进阶)](https://funboost.readthedocs.io/zh-cn/latest/articles/c4b.html)
127
+
128
+ #### [5.funboost框架运行时截图](https://funboost.readthedocs.io/zh-cn/latest/articles/c5.html)
129
+
130
+ #### [6.funboost常见问题回答](https://funboost.readthedocs.io/zh-cn/latest/articles/c6.html)
131
+
132
+ #### [7.funboost更新记录](https://funboost.readthedocs.io/zh-cn/latest/articles/c7.html)
133
+
134
+ #### [8.funboost是万能函数调度框架,当然可以爬虫,自由编程 降维打击 框架奴役](https://funboost.readthedocs.io/zh-cn/latest/articles/c8.html)
135
+
136
+ #### [9.轻松远程服务器部署运行函数](https://funboost.readthedocs.io/zh-cn/latest/articles/c9.html#)
137
+
138
+ #### [10.python3.6-3.12 安装/使用funboost出错问题反馈](https://funboost.readthedocs.io/zh-cn/latest/articles/c10.html)
139
+
140
+ #### [11.funboost 使用某些中间件或三方任务队列框架作为broker的例子(包括celery框架)。](https://funboost.readthedocs.io/zh-cn/latest/articles/c11.html)
141
+
142
+ #### [12.funboost 控制台支持命令行](https://funboost.readthedocs.io/zh-cn/latest/articles/c12.html)
143
+
144
+ #### [13.启动 funboost web manager,查看消费结果和队列管理](https://funboost.readthedocs.io/zh-cn/latest/articles/c13.html)
145
+
146
+
147
+ #### [funboost依赖的nb_log日志文档 https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2](https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2)
197
148
 
198
149
  ```
199
150
  文档很长,但归根结底只需要学习 1.3 里面的这1个例子就行,主要是修改下@boost的各种参数,
@@ -238,7 +189,7 @@ pip install funboost --upgrade
238
189
 
239
190
  ## 1.2 框架功能介绍
240
191
 
241
- 分布式函数调度框架,支持5种并发模式,20+种消息中间件,30种任务控制功能。<br>
192
+ 分布式函数调度框架,支持5种并发模式,30+种消息中间件,30种任务控制功能。<br>
242
193
  用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
243
194
 
244
195
  有了这个框架,用户再也无需亲自手写操作进程、线程、协程的并发的代码了。
@@ -465,6 +416,9 @@ python通用分布式函数调度框架。适用场景范围广泛, 框架非
465
416
  funboost支持命令行操作:
466
417
  使用fire实现的命令行,见文档第12章
467
418
 
419
+ 可视化查看和操作:
420
+ funboost web manager 可以查看和管理队列和消费运行情况。
421
+
468
422
  </pre>
469
423
 
470
424
 
@@ -530,7 +484,53 @@ if __name__ == "__main__":
530
484
  <a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
531
485
 
532
486
 
533
- funboost web manager 截图:
487
+
488
+ ## 1.3.2 funboost丝滑连续启动多个函数消费
489
+
490
+ ```python
491
+
492
+ """
493
+ 此代码
494
+ 1.演示支持多个函数消费队列的无阻塞启动(consume不会阻塞主线程)
495
+ 2.演示支持在一个消费函数内部向任意队列发布新任务,实现多级任务链
496
+ 代码结构清晰,扩展性极强
497
+ """
498
+ from funboost import boost, BrokerEnum,BoosterParams,ctrl_c_recv,ConcurrentModeEnum
499
+ import time
500
+
501
+ class MyBoosterParams(BoosterParams): # 自定义的参数类,继承BoosterParams,用于减少每个消费函数装饰器的重复相同入参个数
502
+ broker_kind: str = BrokerEnum.MEMORY_QUEUE
503
+ max_retry_times: int = 3
504
+ concurrent_mode: str = ConcurrentModeEnum.THREADING
505
+
506
+
507
+ @boost(MyBoosterParams(queue_name='s1_queue', qps=1, ))
508
+ def step1(a:int,b:int):
509
+ print(f'a={a},b={b}')
510
+ time.sleep(0.7)
511
+ for j in range(10):
512
+ step2.push(c=a+b +j,d=a*b +j,e=a-b +j ) # step1消费函数里面,也可以继续向其他任意队列发布消息。
513
+ return a+b
514
+
515
+
516
+ @boost(MyBoosterParams(queue_name='s2_queue', qps=3, ))
517
+ def step2(c:int,d:int,e:int):
518
+ time.sleep(3)
519
+ print(f'c={c},d={d},e={e}')
520
+ return c* d * e
521
+
522
+
523
+ if __name__ == '__main__':
524
+ for i in range(100):
525
+ step1.push(i,i*2) # 向 step1函数的队列发送消息。
526
+ step1.consume() # 调用.consume是非阻塞的启动消费,是在单独的子线程中循环拉取消息的。
527
+ # 有的人还担心阻塞而手动使用 threading.Thread(target=step1.consume).start() 来启动消费,这是完全多此一举的错误写法。
528
+ step2.consume() # 所以可以连续无阻塞丝滑的启动多个函数消费。
529
+ ctrl_c_recv()
530
+
531
+ ```
532
+
533
+ ## funboost web manager 截图:
534
534
 
535
535
  函数消费结果:可查看和搜索函数实时消费状态和结果
536
536
  [![pEJCffK.png](https://s21.ax1x.com/2025/03/04/pEJCffK.png)](https://imgse.com/i/pEJCffK)
@@ -548,8 +548,9 @@ funboost web manager 截图:
548
548
  队列操作,查看消费者详情:查看队列的所有消费者详情
549
549
  [![pEJCgT1.png](https://s21.ax1x.com/2025/03/04/pEJCgT1.png)](https://imgse.com/i/pEJCgT1)
550
550
 
551
- rpc调用:
552
- [![pETq8hj.png](https://s21.ax1x.com/2025/04/28/pETq8hj.png)](https://imgse.com/i/pETq8hj)
551
+ rpc调用:在网页上对30种消息队列发布消息并获取消息的函数执行结;根据taskid获取结果。
552
+ <!-- [![pETq8hj.png](https://s21.ax1x.com/2025/04/28/pETq8hj.png)](https://imgse.com/i/pETq8hj) -->
553
+ [![pE7y8oT.png](https://s21.ax1x.com/2025/04/29/pE7y8oT.png)](https://imgse.com/i/pE7y8oT)
553
554
 
554
555
  ## 1.4 python分布式函数执行为什么重要?
555
556
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- noteId: "aa56d860240511f0b39f3b947bbde921"
2
+ noteId: "accb16103c5611f09da1a79051113d13"
3
3
  tags: []
4
4
 
5
5
  ---
@@ -24,6 +24,8 @@ tags: []
24
24
  pip install funboost ,python全功能分布式函数调度框架。 demo用法例子见文档1.3
25
25
 
26
26
  funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。
27
+ funboost的神奇之处在于它同时拥有"轻量级使用方式"和"重量级功能集",完全颠覆了"功能强大=使用复杂"的传统思维。
28
+ 它证明了一个框架可以既功能丰富又极其易用,这是对传统Python框架设计的一次巧妙超越。
27
29
 
28
30
  只需要一行@boost代码即可分布式执行python一切任意函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
29
31
  支持python所有类型的并发模式,消息队列方面支持全球一切知名消息队列中间件和模拟的实现消息队列,
@@ -31,7 +33,11 @@ funboost的功能是全面性重量级,用户能想得到的功能99%全都有
31
33
  也支持huey dramatiq rq等任务队列框架作为funboost的broker。
32
34
 
33
35
  python函数加速器,框架包罗万象,一统编程思维,兼容50% python编程业务场景,适用范围广。
34
- python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件(或任务队列框架),
36
+ python万能分布式函数调度框架,支持5种并发模式,30+种消息队列中间件
37
+ (不仅支持几乎所有你能想到的消息队列中间件,还支持本地磁盘队列、数据库队列 (SQLAlchemy, Peewee)、
38
+ 内存队列、甚至是 HTTP 请求、WebSocket 等作为任务队列,甚至是将 Celery、Dramatiq、Huey 等其他框架整体作为其 Broker。
39
+ funboost源码高扩展性的设计,造成“万物皆可为Broker”,并不是有30种传统意义上的经典消息队列,
40
+ 因为世界上总共都没有30种知名的经典消息队列),
35
41
  30种任务控制功能。给任意python函数赋能。
36
42
  用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
37
43
 
@@ -77,9 +83,41 @@ funboost的旧框架名字是function_scheduling_distributed_framework , 关系
77
83
  ### 1.0.1 [分布式函数调度框架文档地址 ](https://funboost.readthedocs.io/zh-cn/latest/index.html)
78
84
  [查看分布式函数调度框架文档 https://funboost.readthedocs.io/zh-cn/latest/index.html](https://funboost.readthedocs.io/zh-cn/latest/index.html)
79
85
 
86
+ 文档很长,大部分都是讲原理和对比各种框架。但是用户只需要学习1.3这1个例子就能掌握了。因为其他例子只是 @boost的 BoosterParams 里面的控制入参换了一下。
80
87
 
81
-
82
- [funboost依赖的nb_log日志文档 https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2](https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2)
88
+ 用户只需要专门看 BoosterParams 里面的每个入参的注释就能掌握框架了,因为funboost只有@boost一行代码需要你写。
89
+
90
+ funboost 框架和一般的框架不一样,因为只有一行代码需要掌握,绝对不是要求用户先精通框架本身才能自由发挥。
91
+
92
+ #### [1.python万能分布式函数调度框架简funboost简介](https://funboost.readthedocs.io/zh-cn/latest/articles/c1.html)
93
+ #### [2. funboost对比celery框架](https://funboost.readthedocs.io/zh-cn/latest/articles/c2.html)
94
+
95
+ #### [3.funboost框架详细介绍](https://funboost.readthedocs.io/zh-cn/latest/articles/c3.html)
96
+
97
+ #### [4.funboost使用框架的各种代码示例](https://funboost.readthedocs.io/zh-cn/latest/articles/c4.html)
98
+
99
+ #### [4b.funboost使用框架的各种代码示例(高级进阶)](https://funboost.readthedocs.io/zh-cn/latest/articles/c4b.html)
100
+
101
+ #### [5.funboost框架运行时截图](https://funboost.readthedocs.io/zh-cn/latest/articles/c5.html)
102
+
103
+ #### [6.funboost常见问题回答](https://funboost.readthedocs.io/zh-cn/latest/articles/c6.html)
104
+
105
+ #### [7.funboost更新记录](https://funboost.readthedocs.io/zh-cn/latest/articles/c7.html)
106
+
107
+ #### [8.funboost是万能函数调度框架,当然可以爬虫,自由编程 降维打击 框架奴役](https://funboost.readthedocs.io/zh-cn/latest/articles/c8.html)
108
+
109
+ #### [9.轻松远程服务器部署运行函数](https://funboost.readthedocs.io/zh-cn/latest/articles/c9.html#)
110
+
111
+ #### [10.python3.6-3.12 安装/使用funboost出错问题反馈](https://funboost.readthedocs.io/zh-cn/latest/articles/c10.html)
112
+
113
+ #### [11.funboost 使用某些中间件或三方任务队列框架作为broker的例子(包括celery框架)。](https://funboost.readthedocs.io/zh-cn/latest/articles/c11.html)
114
+
115
+ #### [12.funboost 控制台支持命令行](https://funboost.readthedocs.io/zh-cn/latest/articles/c12.html)
116
+
117
+ #### [13.启动 funboost web manager,查看消费结果和队列管理](https://funboost.readthedocs.io/zh-cn/latest/articles/c13.html)
118
+
119
+
120
+ #### [funboost依赖的nb_log日志文档 https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2](https://nb-log-doc.readthedocs.io/zh_CN/latest/articles/c9.html#id2)
83
121
 
84
122
  ```
85
123
  文档很长,但归根结底只需要学习 1.3 里面的这1个例子就行,主要是修改下@boost的各种参数,
@@ -124,7 +162,7 @@ pip install funboost --upgrade
124
162
 
125
163
  ## 1.2 框架功能介绍
126
164
 
127
- 分布式函数调度框架,支持5种并发模式,20+种消息中间件,30种任务控制功能。<br>
165
+ 分布式函数调度框架,支持5种并发模式,30+种消息中间件,30种任务控制功能。<br>
128
166
  用途概念就是常规经典的 生产者 + 消息队列中间件 + 消费者 编程思想。
129
167
 
130
168
  有了这个框架,用户再也无需亲自手写操作进程、线程、协程的并发的代码了。
@@ -351,6 +389,9 @@ python通用分布式函数调度框架。适用场景范围广泛, 框架非
351
389
  funboost支持命令行操作:
352
390
  使用fire实现的命令行,见文档第12章
353
391
 
392
+ 可视化查看和操作:
393
+ funboost web manager 可以查看和管理队列和消费运行情况。
394
+
354
395
  </pre>
355
396
 
356
397
 
@@ -416,7 +457,53 @@ if __name__ == "__main__":
416
457
  <a href="https://imgse.com/i/pkFkCUe"><img src="https://s21.ax1x.com/2024/04/29/pkFkCUe.png" alt="pkFkCUe.png" border="0" /></a>
417
458
 
418
459
 
419
- funboost web manager 截图:
460
+
461
+ ## 1.3.2 funboost丝滑连续启动多个函数消费
462
+
463
+ ```python
464
+
465
+ """
466
+ 此代码
467
+ 1.演示支持多个函数消费队列的无阻塞启动(consume不会阻塞主线程)
468
+ 2.演示支持在一个消费函数内部向任意队列发布新任务,实现多级任务链
469
+ 代码结构清晰,扩展性极强
470
+ """
471
+ from funboost import boost, BrokerEnum,BoosterParams,ctrl_c_recv,ConcurrentModeEnum
472
+ import time
473
+
474
+ class MyBoosterParams(BoosterParams): # 自定义的参数类,继承BoosterParams,用于减少每个消费函数装饰器的重复相同入参个数
475
+ broker_kind: str = BrokerEnum.MEMORY_QUEUE
476
+ max_retry_times: int = 3
477
+ concurrent_mode: str = ConcurrentModeEnum.THREADING
478
+
479
+
480
+ @boost(MyBoosterParams(queue_name='s1_queue', qps=1, ))
481
+ def step1(a:int,b:int):
482
+ print(f'a={a},b={b}')
483
+ time.sleep(0.7)
484
+ for j in range(10):
485
+ step2.push(c=a+b +j,d=a*b +j,e=a-b +j ) # step1消费函数里面,也可以继续向其他任意队列发布消息。
486
+ return a+b
487
+
488
+
489
+ @boost(MyBoosterParams(queue_name='s2_queue', qps=3, ))
490
+ def step2(c:int,d:int,e:int):
491
+ time.sleep(3)
492
+ print(f'c={c},d={d},e={e}')
493
+ return c* d * e
494
+
495
+
496
+ if __name__ == '__main__':
497
+ for i in range(100):
498
+ step1.push(i,i*2) # 向 step1函数的队列发送消息。
499
+ step1.consume() # 调用.consume是非阻塞的启动消费,是在单独的子线程中循环拉取消息的。
500
+ # 有的人还担心阻塞而手动使用 threading.Thread(target=step1.consume).start() 来启动消费,这是完全多此一举的错误写法。
501
+ step2.consume() # 所以可以连续无阻塞丝滑的启动多个函数消费。
502
+ ctrl_c_recv()
503
+
504
+ ```
505
+
506
+ ## funboost web manager 截图:
420
507
 
421
508
  函数消费结果:可查看和搜索函数实时消费状态和结果
422
509
  [![pEJCffK.png](https://s21.ax1x.com/2025/03/04/pEJCffK.png)](https://imgse.com/i/pEJCffK)
@@ -434,8 +521,9 @@ funboost web manager 截图:
434
521
  队列操作,查看消费者详情:查看队列的所有消费者详情
435
522
  [![pEJCgT1.png](https://s21.ax1x.com/2025/03/04/pEJCgT1.png)](https://imgse.com/i/pEJCgT1)
436
523
 
437
- rpc调用:
438
- [![pETq8hj.png](https://s21.ax1x.com/2025/04/28/pETq8hj.png)](https://imgse.com/i/pETq8hj)
524
+ rpc调用:在网页上对30种消息队列发布消息并获取消息的函数执行结;根据taskid获取结果。
525
+ <!-- [![pETq8hj.png](https://s21.ax1x.com/2025/04/28/pETq8hj.png)](https://imgse.com/i/pETq8hj) -->
526
+ [![pE7y8oT.png](https://s21.ax1x.com/2025/04/29/pE7y8oT.png)](https://imgse.com/i/pE7y8oT)
439
527
 
440
528
  ## 1.4 python分布式函数执行为什么重要?
441
529
 
@@ -13,7 +13,7 @@ set_frame_config这个模块的 use_config_form_funboost_config_module() 是核
13
13
  这段注释说明和使用的用户无关,只和框架开发人员有关.
14
14
  '''
15
15
 
16
- __version__ = "48.8"
16
+ __version__ = "48.9"
17
17
 
18
18
  from funboost.set_frame_config import show_frame_config
19
19
 
@@ -98,7 +98,7 @@ class ThreadPoolExecutorShrinkAble(Executor, FunboostFileLoggerMixin, LoggerLeve
98
98
  # MIN_WORKERS = 5 # 最小值可以设置为0,代表线程池无论多久没有任务最少要保持多少个线程待命。
99
99
  # KEEP_ALIVE_TIME = 60 # 这个参数表名,当前线程从queue.get(block=True, timeout=KEEP_ALIVE_TIME)多久没任务,就线程结束。
100
100
 
101
- MIN_WORKERS = 5
101
+ MIN_WORKERS = 1
102
102
  KEEP_ALIVE_TIME = 60
103
103
 
104
104
  def __init__(self, max_workers: int = None, thread_name_prefix='',work_queue_maxsize=10):
@@ -108,9 +108,23 @@ class ConstStrForClassMethod:
108
108
  OBJ_INIT_PARAMS = 'obj_init_params'
109
109
  CLS_MODULE = 'cls_module'
110
110
  CLS_FILE = 'cls_file'
111
-
112
111
  class RedisKeys:
113
112
  REDIS_KEY_PAUSE_FLAG = 'funboost_pause_flag'
114
113
  REDIS_KEY_STOP_FLAG = 'funboost_stop_flag'
115
114
  QUEUE__MSG_COUNT_MAP = 'funboost_queue__msg_count_map'
116
- FUNBOOST_QUEUE__CONSUMER_PARAMS= 'funboost_queue__consumer_parmas'
115
+ FUNBOOST_QUEUE__CONSUMER_PARAMS= 'funboost_queue__consumer_parmas'
116
+ FUNBOOST_QUEUE__RUN_COUNT_MAP = 'funboost_queue__run_count_map'
117
+ FUNBOOST_QUEUE__RUN_FAIL_COUNT_MAP = 'funboost_queue__run_fail_count_map'
118
+ FUNBOOST_ALL_QUEUE_NAMES = 'funboost_all_queue_names'
119
+ FUNBOOST_ALL_IPS = 'funboost_all_ips'
120
+
121
+ FUNBOOST_HEARTBEAT_QUEUE__DICT_PREFIX = 'funboost_hearbeat_queue__dict:'
122
+ FUNBOOST_HEARTBEAT_SERVER__DICT_PREFIX = 'funboost_hearbeat_server__dict:'
123
+
124
+ @staticmethod
125
+ def gen_funboost_hearbeat_queue__dict_key_by_queue_name(queue_name):
126
+ return f'{RedisKeys.FUNBOOST_HEARTBEAT_QUEUE__DICT_PREFIX}{queue_name}'
127
+
128
+ @staticmethod
129
+ def gen_funboost_hearbeat_server__dict_key_by_ip(ip):
130
+ return f'{RedisKeys.FUNBOOST_HEARTBEAT_SERVER__DICT_PREFIX}{ip}'
@@ -194,7 +194,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
194
194
  self.consumer_params.broker_exclusive_config = broker_exclusive_config_merge
195
195
 
196
196
  self._stop_flag = None
197
- self._pause_flag = None # 暂停消费标志,从reids读取
197
+ self._pause_flag = threading.Event() # 暂停消费标志,从reids读取
198
198
  self._last_show_pause_log_time = 0
199
199
  # self._redis_key_stop_flag = f'funboost_stop_flag'
200
200
  # self._redis_key_pause_flag = RedisKeys.REDIS_KEY_PAUSE_FLAG
@@ -243,12 +243,27 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
243
243
  # print(self.publisher_params)
244
244
  if is_main_process:
245
245
  self.logger.info(f'{self.queue_name} consumer 的消费者配置:\n {self.consumer_params.json_str_value()}')
246
+
246
247
  atexit.register(self.join_shedual_task_thread)
247
248
 
249
+ self._save_consumer_params()
250
+
248
251
  if self.consumer_params.is_auto_start_consuming_message:
249
252
  _ = self.publisher_of_same_queue
250
253
  self.start_consuming_message()
251
254
 
255
+ def _save_consumer_params(self):
256
+ """
257
+ 保存队列的消费者参数,以便在web界面查看。
258
+ :return:
259
+ """
260
+ if self.consumer_params.is_send_consumer_hearbeat_to_redis:
261
+ RedisMixin().redis_db_frame.sadd(RedisKeys.FUNBOOST_ALL_QUEUE_NAMES,self.queue_name)
262
+ RedisMixin().redis_db_frame.hmset(RedisKeys.FUNBOOST_QUEUE__CONSUMER_PARAMS,
263
+ {self.queue_name: self.consumer_params.json_str_value()})
264
+ RedisMixin().redis_db_frame.sadd(RedisKeys.FUNBOOST_ALL_IPS,nb_log_config_default.computer_ip)
265
+
266
+
252
267
  def _build_logger(self):
253
268
  logger_prefix = self.consumer_params.logger_prefix
254
269
  if logger_prefix != '':
@@ -456,15 +471,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
456
471
  return msg
457
472
 
458
473
  def _submit_task(self, kw):
459
- while 1: # 这一块的代码为支持暂停消费。
460
- # print(self._pause_flag)
461
- if self._pause_flag == 1:
462
- time.sleep(5)
463
- if time.time() - self._last_show_pause_log_time > 60:
464
- self.logger.warning(f'已设置 {self.queue_name} 队列中的任务为暂停消费')
465
- self._last_show_pause_log_time = time.time()
466
- else:
467
- break
474
+
468
475
  kw['body'] = self.convert_msg_before_run(kw['body'])
469
476
  self._print_message_get_from_broker(kw['body'])
470
477
  if self._judge_is_daylight():
@@ -529,6 +536,16 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
529
536
  else:
530
537
  self._frequency_control(self.consumer_params.qps, self._msg_schedule_time_intercal)
531
538
 
539
+ while 1: # 这一块的代码为支持暂停消费。
540
+ # print(self._pause_flag)
541
+ if self._pause_flag.is_set():
542
+ if time.time() - self._last_show_pause_log_time > 60:
543
+ self.logger.warning(f'已设置 {self.queue_name} 队列中的任务为暂停消费')
544
+ self._last_show_pause_log_time = time.time()
545
+ time.sleep(5)
546
+ else:
547
+ break
548
+
532
549
  def __delete_eta_countdown(self, msg_body: dict):
533
550
  self.__dict_pop(msg_body.get('extra', {}), 'eta')
534
551
  self.__dict_pop(msg_body.get('extra', {}), 'countdown')
@@ -707,7 +724,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
707
724
  fct_context = FctContext(function_params=function_only_params,
708
725
  full_msg=kw['body'],
709
726
  function_result_status=function_result_status,
710
- logger=self.logger, )
727
+ logger=self.logger, queue_name=self.queue_name,)
711
728
 
712
729
  try:
713
730
  function_run = self.consuming_function
@@ -715,6 +732,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
715
732
  fct_context.asyncio_use_thread_concurrent_mode = True
716
733
  function_run = sync_or_async_fun_deco(function_run)
717
734
  else:
735
+ pass
718
736
  fct_context.asynco_use_thread_concurrent_mode = False
719
737
  fct.set_fct_context(fct_context)
720
738
  function_timeout = self._get_priority_conf(kw, 'function_timeout')
@@ -866,7 +884,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
866
884
  fct_context = FctContext(function_params=function_only_params,
867
885
  full_msg=kw['body'],
868
886
  function_result_status=function_result_status,
869
- logger=self.logger, )
887
+ logger=self.logger,queue_name=self.queue_name,)
870
888
  fct.set_fct_context(fct_context)
871
889
  try:
872
890
  corotinue_obj = self.consuming_function(**self._convert_real_function_only_params_by_conusuming_function_kind(function_only_params))
@@ -1177,6 +1195,10 @@ class MetricCalculation:
1177
1195
  msg += f''' 预计还需要 {need_time} 时间 才能执行完成 队列 {self.consumer.queue_name} 中的 {self.msg_num_in_broker} 个剩余任务'''
1178
1196
  self.consumer.logger.info(msg)
1179
1197
  self.last_show_remaining_execution_time = time.time()
1198
+ if self.consumer.consumer_params.is_send_consumer_hearbeat_to_redis is True:
1199
+ RedisMixin().redis_db_frame.hincrby(RedisKeys.FUNBOOST_QUEUE__RUN_COUNT_MAP,self.consumer.queue_name,self.execute_task_times_every_unit_time_temp)
1200
+ RedisMixin().redis_db_frame.hincrby(RedisKeys.FUNBOOST_QUEUE__RUN_FAIL_COUNT_MAP,self.consumer.queue_name,self.execute_task_times_every_unit_time_temp_fail)
1201
+
1180
1202
  self.current_time_for_execute_task_times_every_unit_time = time.time()
1181
1203
  self.consuming_function_cost_time_total_every_unit_time_tmp = 0
1182
1204
  self.execute_task_times_every_unit_time_temp = 0
@@ -1233,22 +1255,13 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
1233
1255
  self.active_consumer_num = 1
1234
1256
  self._last_show_consumer_num_timestamp = 0
1235
1257
 
1236
- self._queue__consumer_identification_map_key_name = f'funboost_hearbeat_queue__dict:{self._queue_name}'
1237
- self._server__consumer_identification_map_key_name = f'funboost_hearbeat_server__dict:{nb_log_config_default.computer_ip}'
1258
+ self._queue__consumer_identification_map_key_name = RedisKeys.gen_funboost_hearbeat_queue__dict_key_by_queue_name(self._queue_name)
1259
+ self._server__consumer_identification_map_key_name = RedisKeys.gen_funboost_hearbeat_server__dict_key_by_ip(nb_log_config_default.computer_ip)
1238
1260
 
1239
1261
  def run(self):
1240
- self._send_consumer_params()
1241
1262
  self.send_heartbeat()
1242
1263
  self._consumer.keep_circulating(self.SEND_HEARTBEAT_INTERVAL, block=False, daemon=False)(self.send_heartbeat)()
1243
1264
 
1244
- def _send_consumer_params(self):
1245
- """
1246
- 保存队列的消费者参数,以便在web界面查看。
1247
- :return:
1248
- """
1249
- self.redis_db_frame.hmset('funboost_queue__consumer_parmas',{self._consumer.queue_name: self._consumer.consumer_params.json_str_value()})
1250
-
1251
-
1252
1265
  def _send_heartbeat_with_dict_value(self, redis_key, ):
1253
1266
  # 发送当前消费者进程心跳的,值是字典,按一个机器或者一个队列运行了哪些进程。
1254
1267
 
@@ -1315,8 +1328,8 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
1315
1328
 
1316
1329
  pause_flag = self.redis_db_frame.hget(RedisKeys.REDIS_KEY_PAUSE_FLAG,self._consumer.queue_name)
1317
1330
  if pause_flag is not None and int(pause_flag) == 1:
1318
- self._consumer._pause_flag = 1
1331
+ self._consumer._pause_flag.set()
1319
1332
  else:
1320
- self._consumer._pause_flag = 0
1333
+ self._consumer._pause_flag.clear()
1321
1334
 
1322
1335
 
@@ -30,6 +30,7 @@ class RabbitmqConsumerAmqpStorm(AbstractConsumer):
30
30
  rp.channel_wrapper_by_ampqstormbaic.qos(self.consumer_params.concurrent_num)
31
31
  rp.channel_wrapper_by_ampqstormbaic.consume(callback=callback, queue=self.queue_name, no_ack=self.consumer_params.broker_exclusive_config['no_ack'],
32
32
  )
33
+ self._rp=rp
33
34
  rp.channel.start_consuming(auto_decode=True)
34
35
 
35
36
  def _confirm_consume(self, kw):
@@ -44,3 +45,7 @@ class RabbitmqConsumerAmqpStorm(AbstractConsumer):
44
45
  # amqpstorm.Message.delivery_tag
45
46
  # print(kw['amqpstorm_message'].delivery_tag)
46
47
  kw['amqpstorm_message'].nack(requeue=True)
48
+ # kw['amqpstorm_message'].reject(requeue=True)
49
+ # kw['amqpstorm_message'].ack()
50
+ # self.publisher_of_same_queue.publish(kw['body'])
51
+