funboost 45.9__tar.gz → 46.1__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 (291) hide show
  1. {funboost-45.9/funboost.egg-info → funboost-46.1}/PKG-INFO +5 -2
  2. {funboost-45.9 → funboost-46.1}/README.md +3 -0
  3. {funboost-45.9 → funboost-46.1}/funboost/__init__.py +1 -1
  4. {funboost-45.9 → funboost-46.1}/funboost/assist/celery_helper.py +16 -3
  5. {funboost-45.9 → funboost-46.1}/funboost/consumers/base_consumer.py +21 -10
  6. {funboost-45.9 → funboost-46.1}/funboost/consumers/celery_consumer.py +1 -1
  7. {funboost-45.9 → funboost-46.1}/funboost/consumers/confirm_mixin.py +3 -3
  8. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_brpoplpush_consumer.py +1 -1
  9. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_consumer_ack_using_timeout.py +1 -1
  10. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_stream_consumer.py +1 -1
  11. {funboost-45.9 → funboost-46.1}/funboost/core/booster.py +3 -2
  12. {funboost-45.9 → funboost-46.1}/funboost/core/funboost_config_getter.py +1 -1
  13. {funboost-45.9 → funboost-46.1}/funboost/core/helper_funs.py +1 -1
  14. {funboost-45.9 → funboost-46.1}/funboost/core/msg_result_getter.py +1 -1
  15. {funboost-45.9 → funboost-46.1/funboost.egg-info}/PKG-INFO +5 -2
  16. {funboost-45.9 → funboost-46.1}/setup.py +1 -1
  17. {funboost-45.9 → funboost-46.1}/LICENSE +0 -0
  18. {funboost-45.9 → funboost-46.1}/MANIFEST.in +0 -0
  19. {funboost-45.9 → funboost-46.1}/funboost/__init__old.py +0 -0
  20. {funboost-45.9 → funboost-46.1}/funboost/__main__.py +0 -0
  21. {funboost-45.9 → funboost-46.1}/funboost/assist/__init__.py +0 -0
  22. {funboost-45.9 → funboost-46.1}/funboost/assist/dramatiq_helper.py +0 -0
  23. {funboost-45.9 → funboost-46.1}/funboost/assist/faststream_helper.py +0 -0
  24. {funboost-45.9 → funboost-46.1}/funboost/assist/huey_helper.py +0 -0
  25. {funboost-45.9 → funboost-46.1}/funboost/assist/rocketry_helper.py +0 -0
  26. {funboost-45.9 → funboost-46.1}/funboost/assist/rq_helper.py +0 -0
  27. {funboost-45.9 → funboost-46.1}/funboost/assist/rq_windows_worker.py +0 -0
  28. {funboost-45.9 → funboost-46.1}/funboost/assist/taskiq_helper.py +0 -0
  29. {funboost-45.9 → funboost-46.1}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
  30. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/__init__.py +0 -0
  31. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/async_helper.py +0 -0
  32. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/async_pool_executor.py +0 -0
  33. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/backup/__init__.py +0 -0
  34. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
  35. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
  36. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
  37. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/base_pool_type.py +0 -0
  38. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
  39. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
  40. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
  41. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
  42. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
  43. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
  44. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/custom_threadpool_executor.py +0 -0
  45. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
  46. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
  47. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
  48. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/pool_commons.py +0 -0
  49. {funboost-45.9 → funboost-46.1}/funboost/concurrent_pool/single_thread_executor.py +0 -0
  50. {funboost-45.9 → funboost-46.1}/funboost/constant.py +0 -0
  51. {funboost-45.9 → funboost-46.1}/funboost/consumers/__init__.py +0 -0
  52. {funboost-45.9 → funboost-46.1}/funboost/consumers/dramatiq_consumer.py +0 -0
  53. {funboost-45.9 → funboost-46.1}/funboost/consumers/empty_consumer.py +0 -0
  54. {funboost-45.9 → funboost-46.1}/funboost/consumers/faststream_consumer.py +0 -0
  55. {funboost-45.9 → funboost-46.1}/funboost/consumers/http_consumer.py +0 -0
  56. {funboost-45.9 → funboost-46.1}/funboost/consumers/http_consumer000.py +0 -0
  57. {funboost-45.9 → funboost-46.1}/funboost/consumers/httpsqs_consumer.py +0 -0
  58. {funboost-45.9 → funboost-46.1}/funboost/consumers/huey_consumer.py +0 -0
  59. {funboost-45.9 → funboost-46.1}/funboost/consumers/kafka_consumer.py +0 -0
  60. {funboost-45.9 → funboost-46.1}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
  61. {funboost-45.9 → funboost-46.1}/funboost/consumers/kombu_consumer.py +0 -0
  62. {funboost-45.9 → funboost-46.1}/funboost/consumers/local_python_queue_consumer.py +0 -0
  63. {funboost-45.9 → funboost-46.1}/funboost/consumers/memory_deque_consumer.py +0 -0
  64. {funboost-45.9 → funboost-46.1}/funboost/consumers/mongomq_consumer.py +0 -0
  65. {funboost-45.9 → funboost-46.1}/funboost/consumers/mqtt_consumer.py +0 -0
  66. {funboost-45.9 → funboost-46.1}/funboost/consumers/nameko_consumer.py +0 -0
  67. {funboost-45.9 → funboost-46.1}/funboost/consumers/nats_consumer.py +0 -0
  68. {funboost-45.9 → funboost-46.1}/funboost/consumers/nsq_consumer.py +0 -0
  69. {funboost-45.9 → funboost-46.1}/funboost/consumers/peewee_conusmer.py +0 -0
  70. {funboost-45.9 → funboost-46.1}/funboost/consumers/persist_queue_consumer.py +0 -0
  71. {funboost-45.9 → funboost-46.1}/funboost/consumers/pulsar_consumer.py +0 -0
  72. {funboost-45.9 → funboost-46.1}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -0
  73. {funboost-45.9 → funboost-46.1}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
  74. {funboost-45.9 → funboost-46.1}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
  75. {funboost-45.9 → funboost-46.1}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
  76. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_consumer.py +0 -0
  77. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_consumer_ack_able.py +0 -0
  78. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_consumer_priority.py +0 -0
  79. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_consumer_simple.py +0 -0
  80. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_filter.py +0 -0
  81. {funboost-45.9 → funboost-46.1}/funboost/consumers/redis_pubsub_consumer.py +0 -0
  82. {funboost-45.9 → funboost-46.1}/funboost/consumers/rocketmq_consumer.py +0 -0
  83. {funboost-45.9 → funboost-46.1}/funboost/consumers/rq_consumer.py +0 -0
  84. {funboost-45.9 → funboost-46.1}/funboost/consumers/sqlachemy_consumer.py +0 -0
  85. {funboost-45.9 → funboost-46.1}/funboost/consumers/tcp_consumer.py +0 -0
  86. {funboost-45.9 → funboost-46.1}/funboost/consumers/txt_file_consumer.py +0 -0
  87. {funboost-45.9 → funboost-46.1}/funboost/consumers/udp_consumer.py +0 -0
  88. {funboost-45.9 → funboost-46.1}/funboost/consumers/zeromq_consumer.py +0 -0
  89. {funboost-45.9 → funboost-46.1}/funboost/contrib/__init__.py +0 -0
  90. {funboost-45.9 → funboost-46.1}/funboost/contrib/api_publish_msg.py +0 -0
  91. {funboost-45.9 → funboost-46.1}/funboost/contrib/django_db_deco.py +0 -0
  92. {funboost-45.9 → funboost-46.1}/funboost/contrib/queue2queue.py +0 -0
  93. {funboost-45.9 → funboost-46.1}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
  94. {funboost-45.9 → funboost-46.1}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
  95. {funboost-45.9 → funboost-46.1}/funboost/core/__init__.py +0 -0
  96. {funboost-45.9 → funboost-46.1}/funboost/core/active_cousumer_info_getter.py +0 -0
  97. {funboost-45.9 → funboost-46.1}/funboost/core/cli/__init__.py +0 -0
  98. {funboost-45.9 → funboost-46.1}/funboost/core/cli/discovery_boosters.py +0 -0
  99. {funboost-45.9 → funboost-46.1}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
  100. {funboost-45.9 → funboost-46.1}/funboost/core/cli/funboost_fire.py +0 -0
  101. {funboost-45.9 → funboost-46.1}/funboost/core/current_task.py +0 -0
  102. {funboost-45.9 → funboost-46.1}/funboost/core/exceptions.py +0 -0
  103. {funboost-45.9 → funboost-46.1}/funboost/core/fabric_deploy_helper.py +0 -0
  104. {funboost-45.9 → funboost-46.1}/funboost/core/funboost_time.py +0 -0
  105. {funboost-45.9 → funboost-46.1}/funboost/core/func_params_model.py +0 -0
  106. {funboost-45.9 → funboost-46.1}/funboost/core/function_result_status_config.py +0 -0
  107. {funboost-45.9 → funboost-46.1}/funboost/core/function_result_status_saver.py +0 -0
  108. {funboost-45.9 → funboost-46.1}/funboost/core/kill_remote_task.py +0 -0
  109. {funboost-45.9 → funboost-46.1}/funboost/core/lazy_impoter.py +0 -0
  110. {funboost-45.9 → funboost-46.1}/funboost/core/loggers.py +0 -0
  111. {funboost-45.9 → funboost-46.1}/funboost/core/muliti_process_enhance.py +0 -0
  112. {funboost-45.9 → funboost-46.1}/funboost/core/serialization.py +0 -0
  113. {funboost-45.9 → funboost-46.1}/funboost/core/task_id_logger.py +0 -0
  114. {funboost-45.9 → funboost-46.1}/funboost/factories/__init__.py +0 -0
  115. {funboost-45.9 → funboost-46.1}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
  116. {funboost-45.9 → funboost-46.1}/funboost/factories/consumer_factory.py +0 -0
  117. {funboost-45.9 → funboost-46.1}/funboost/factories/publisher_factotry.py +0 -0
  118. {funboost-45.9 → funboost-46.1}/funboost/funboost_config_deafult.py +0 -0
  119. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
  120. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
  121. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/app.py +0 -0
  122. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/functions.py +0 -0
  123. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/assets/css/custom.css +0 -0
  124. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
  125. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
  126. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/assets/js/custom.js +0 -0
  127. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
  128. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/css/style.css +0 -0
  129. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/images/bg.jpg +0 -0
  130. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/images/password.png +0 -0
  131. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/images/tick.png +0 -0
  132. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/images/user.png +0 -0
  133. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
  134. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/templates/index.html +0 -0
  135. {funboost-45.9 → funboost-46.1}/funboost/function_result_web/templates/login.html +0 -0
  136. {funboost-45.9 → funboost-46.1}/funboost/publishers/__init__.py +0 -0
  137. {funboost-45.9 → funboost-46.1}/funboost/publishers/base_publisher.py +0 -0
  138. {funboost-45.9 → funboost-46.1}/funboost/publishers/celery_publisher.py +0 -0
  139. {funboost-45.9 → funboost-46.1}/funboost/publishers/celery_publisher000.py +0 -0
  140. {funboost-45.9 → funboost-46.1}/funboost/publishers/confluent_kafka_publisher.py +0 -0
  141. {funboost-45.9 → funboost-46.1}/funboost/publishers/dramatiq_publisher.py +0 -0
  142. {funboost-45.9 → funboost-46.1}/funboost/publishers/empty_publisher.py +0 -0
  143. {funboost-45.9 → funboost-46.1}/funboost/publishers/faststream_publisher.py +0 -0
  144. {funboost-45.9 → funboost-46.1}/funboost/publishers/http_publisher.py +0 -0
  145. {funboost-45.9 → funboost-46.1}/funboost/publishers/httpsqs_publisher.py +0 -0
  146. {funboost-45.9 → funboost-46.1}/funboost/publishers/huey_publisher.py +0 -0
  147. {funboost-45.9 → funboost-46.1}/funboost/publishers/kafka_publisher.py +0 -0
  148. {funboost-45.9 → funboost-46.1}/funboost/publishers/kombu_publisher.py +0 -0
  149. {funboost-45.9 → funboost-46.1}/funboost/publishers/local_python_queue_publisher.py +0 -0
  150. {funboost-45.9 → funboost-46.1}/funboost/publishers/meomory_deque_publisher.py +0 -0
  151. {funboost-45.9 → funboost-46.1}/funboost/publishers/mongomq_publisher.py +0 -0
  152. {funboost-45.9 → funboost-46.1}/funboost/publishers/mqtt_publisher.py +0 -0
  153. {funboost-45.9 → funboost-46.1}/funboost/publishers/nameko_publisher.py +0 -0
  154. {funboost-45.9 → funboost-46.1}/funboost/publishers/nats_publisher.py +0 -0
  155. {funboost-45.9 → funboost-46.1}/funboost/publishers/nsq_publisher.py +0 -0
  156. {funboost-45.9 → funboost-46.1}/funboost/publishers/peewee_publisher.py +0 -0
  157. {funboost-45.9 → funboost-46.1}/funboost/publishers/persist_queue_publisher.py +0 -0
  158. {funboost-45.9 → funboost-46.1}/funboost/publishers/pulsar_publisher.py +0 -0
  159. {funboost-45.9 → funboost-46.1}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
  160. {funboost-45.9 → funboost-46.1}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
  161. {funboost-45.9 → funboost-46.1}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
  162. {funboost-45.9 → funboost-46.1}/funboost/publishers/redis_publisher.py +0 -0
  163. {funboost-45.9 → funboost-46.1}/funboost/publishers/redis_publisher_lpush.py +0 -0
  164. {funboost-45.9 → funboost-46.1}/funboost/publishers/redis_publisher_priority.py +0 -0
  165. {funboost-45.9 → funboost-46.1}/funboost/publishers/redis_publisher_simple.py +0 -0
  166. {funboost-45.9 → funboost-46.1}/funboost/publishers/redis_pubsub_publisher.py +0 -0
  167. {funboost-45.9 → funboost-46.1}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
  168. {funboost-45.9 → funboost-46.1}/funboost/publishers/redis_stream_publisher.py +0 -0
  169. {funboost-45.9 → funboost-46.1}/funboost/publishers/rocketmq_publisher.py +0 -0
  170. {funboost-45.9 → funboost-46.1}/funboost/publishers/rq_publisher.py +0 -0
  171. {funboost-45.9 → funboost-46.1}/funboost/publishers/sqla_queue_publisher.py +0 -0
  172. {funboost-45.9 → funboost-46.1}/funboost/publishers/tcp_publisher.py +0 -0
  173. {funboost-45.9 → funboost-46.1}/funboost/publishers/txt_file_publisher.py +0 -0
  174. {funboost-45.9 → funboost-46.1}/funboost/publishers/udp_publisher.py +0 -0
  175. {funboost-45.9 → funboost-46.1}/funboost/publishers/zeromq_publisher.py +0 -0
  176. {funboost-45.9 → funboost-46.1}/funboost/queues/__init__.py +0 -0
  177. {funboost-45.9 → funboost-46.1}/funboost/queues/memory_queues_map.py +0 -0
  178. {funboost-45.9 → funboost-46.1}/funboost/queues/peewee_queue.py +0 -0
  179. {funboost-45.9 → funboost-46.1}/funboost/queues/sqla_queue.py +0 -0
  180. {funboost-45.9 → funboost-46.1}/funboost/set_frame_config.py +0 -0
  181. {funboost-45.9 → funboost-46.1}/funboost/timing_job/__init__.py +0 -0
  182. {funboost-45.9 → funboost-46.1}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
  183. {funboost-45.9 → funboost-46.1}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
  184. {funboost-45.9 → funboost-46.1}/funboost/utils/__init__.py +0 -0
  185. {funboost-45.9 → funboost-46.1}/funboost/utils/apscheduler_monkey.py +0 -0
  186. {funboost-45.9 → funboost-46.1}/funboost/utils/block_exit.py +0 -0
  187. {funboost-45.9 → funboost-46.1}/funboost/utils/bulk_operation.py +0 -0
  188. {funboost-45.9 → funboost-46.1}/funboost/utils/class_utils.py +0 -0
  189. {funboost-45.9 → funboost-46.1}/funboost/utils/ctrl_c_end.py +0 -0
  190. {funboost-45.9 → funboost-46.1}/funboost/utils/custom_pysnooper.py +0 -0
  191. {funboost-45.9 → funboost-46.1}/funboost/utils/decorators.py +0 -0
  192. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages/__init__.py +0 -0
  193. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
  194. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
  195. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
  196. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
  197. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
  198. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
  199. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
  200. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
  201. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
  202. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
  203. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
  204. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
  205. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
  206. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
  207. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
  208. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
  209. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
  210. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
  211. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
  212. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
  213. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
  214. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
  215. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
  216. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
  217. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
  218. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
  219. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
  220. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
  221. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
  222. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
  223. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
  224. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
  225. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
  226. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
  227. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
  228. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
  229. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
  230. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
  231. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
  232. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
  233. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
  234. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
  235. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
  236. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -0
  237. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
  238. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
  239. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
  240. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
  241. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
  242. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
  243. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
  244. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
  245. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
  246. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
  247. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
  248. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
  249. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
  250. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
  251. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
  252. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
  253. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
  254. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
  255. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
  256. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
  257. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc2222.py +0 -0
  258. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
  259. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
  260. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
  261. {funboost-45.9 → funboost-46.1}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -0
  262. {funboost-45.9 → funboost-46.1}/funboost/utils/develop_log.py +0 -0
  263. {funboost-45.9 → funboost-46.1}/funboost/utils/expire_lock.py +0 -0
  264. {funboost-45.9 → funboost-46.1}/funboost/utils/json_helper.py +0 -0
  265. {funboost-45.9 → funboost-46.1}/funboost/utils/mongo_util.py +0 -0
  266. {funboost-45.9 → funboost-46.1}/funboost/utils/monkey_color_log.py +0 -0
  267. {funboost-45.9 → funboost-46.1}/funboost/utils/monkey_patches.py +0 -0
  268. {funboost-45.9 → funboost-46.1}/funboost/utils/mqtt_util.py +0 -0
  269. {funboost-45.9 → funboost-46.1}/funboost/utils/paramiko_util.py +0 -0
  270. {funboost-45.9 → funboost-46.1}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
  271. {funboost-45.9 → funboost-46.1}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
  272. {funboost-45.9 → funboost-46.1}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
  273. {funboost-45.9 → funboost-46.1}/funboost/utils/pysnooper_ydf/utils.py +0 -0
  274. {funboost-45.9 → funboost-46.1}/funboost/utils/pysnooper_ydf/variables.py +0 -0
  275. {funboost-45.9 → funboost-46.1}/funboost/utils/rabbitmq_factory.py +0 -0
  276. {funboost-45.9 → funboost-46.1}/funboost/utils/redis_manager.py +0 -0
  277. {funboost-45.9 → funboost-46.1}/funboost/utils/redis_manager_old.py +0 -0
  278. {funboost-45.9 → funboost-46.1}/funboost/utils/resource_monitoring.py +0 -0
  279. {funboost-45.9 → funboost-46.1}/funboost/utils/restart_python.py +0 -0
  280. {funboost-45.9 → funboost-46.1}/funboost/utils/simple_data_class.py +0 -0
  281. {funboost-45.9 → funboost-46.1}/funboost/utils/str_utils.py +0 -0
  282. {funboost-45.9 → funboost-46.1}/funboost/utils/time_util.py +0 -0
  283. {funboost-45.9 → funboost-46.1}/funboost/utils/times/__init__.py +0 -0
  284. {funboost-45.9 → funboost-46.1}/funboost/utils/times/version.py +0 -0
  285. {funboost-45.9 → funboost-46.1}/funboost/utils/un_strict_json_dumps.py +0 -0
  286. {funboost-45.9 → funboost-46.1}/funboost.egg-info/SOURCES.txt +0 -0
  287. {funboost-45.9 → funboost-46.1}/funboost.egg-info/dependency_links.txt +0 -0
  288. {funboost-45.9 → funboost-46.1}/funboost.egg-info/entry_points.txt +0 -0
  289. {funboost-45.9 → funboost-46.1}/funboost.egg-info/requires.txt +0 -0
  290. {funboost-45.9 → funboost-46.1}/funboost.egg-info/top_level.txt +0 -0
  291. {funboost-45.9 → funboost-46.1}/setup.cfg +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 45.9
4
- Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
3
+ Version: 46.1
4
+ Summary: pip install funboost,python全功能分布式函数调度框架,funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
5
5
  Home-page: https://github.com/ydf0509/funboost
6
6
  Author: bfzs
7
7
  Author-email: ydf0509@sohu.com
@@ -49,6 +49,8 @@ License-File: LICENSE
49
49
  <pre style="color: greenyellow;background-color: #0c1119; font-size: medium;">
50
50
  pip install funboost ,python全功能分布式函数调度框架。 demo用法例子见文档1.3
51
51
 
52
+ funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。
53
+
52
54
  只需要一行@boost代码即可分布式执行python一切任意函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
53
55
  支持python所有类型的并发模式,消息队列方面支持全球一切知名消息队列中间件和模拟的实现消息队列,
54
56
  同时funboost支持celery整个框架作为核心来发布和消费消息,使用funboost的极简api方式来自动化配置和利用celery调度,
@@ -101,6 +103,7 @@ funboost的旧框架名字是function_scheduling_distributed_framework , 关系
101
103
  [查看分布式函数调度框架文档 https://funboost.readthedocs.io/zh-cn/latest/index.html](https://funboost.readthedocs.io/zh-cn/latest/index.html)
102
104
 
103
105
 
106
+
104
107
  [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)
105
108
 
106
109
  ```
@@ -17,6 +17,8 @@
17
17
  <pre style="color: greenyellow;background-color: #0c1119; font-size: medium;">
18
18
  pip install funboost ,python全功能分布式函数调度框架。 demo用法例子见文档1.3
19
19
 
20
+ funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。
21
+
20
22
  只需要一行@boost代码即可分布式执行python一切任意函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
21
23
  支持python所有类型的并发模式,消息队列方面支持全球一切知名消息队列中间件和模拟的实现消息队列,
22
24
  同时funboost支持celery整个框架作为核心来发布和消费消息,使用funboost的极简api方式来自动化配置和利用celery调度,
@@ -69,6 +71,7 @@ funboost的旧框架名字是function_scheduling_distributed_framework , 关系
69
71
  [查看分布式函数调度框架文档 https://funboost.readthedocs.io/zh-cn/latest/index.html](https://funboost.readthedocs.io/zh-cn/latest/index.html)
70
72
 
71
73
 
74
+
72
75
  [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)
73
76
 
74
77
  ```
@@ -13,7 +13,7 @@ set_frame_config这个模块的 use_config_form_funboost_config_module() 是核
13
13
  这段注释说明和使用的用户无关,只和框架开发人员有关.
14
14
  '''
15
15
 
16
- __version__ = "45.9"
16
+ __version__ = "46.1"
17
17
 
18
18
  from funboost.set_frame_config import show_frame_config
19
19
 
@@ -1,3 +1,5 @@
1
+ import copy
2
+
1
3
  import json
2
4
  import logging
3
5
  import os
@@ -79,10 +81,18 @@ class CeleryHelper:
79
81
  cls.to_be_start_work_celery_queue_name_set.add(queue_name)
80
82
 
81
83
  @classmethod
82
- def realy_start_celery_worker(cls, worker_name=None, loglevel='INFO'):
83
- if len(cls.to_be_start_work_celery_queue_name_set) == 0:
84
+ def realy_start_celery_worker(cls, worker_name=None, loglevel='INFO',worker_concurrency=200,start_consume_queue_name_list:list=None,is_start_consume_all_queues:bool=False):
85
+
86
+ if is_start_consume_all_queues is False:
87
+ to_be_start_work_celery_queue_name_set_new = copy.copy(cls.to_be_start_work_celery_queue_name_set)
88
+ to_be_start_work_celery_queue_name_set_new.update(set(start_consume_queue_name_list))
89
+ else:
90
+ from funboost import BoostersManager
91
+ # print(BoostersManager.get_all_queues())
92
+ to_be_start_work_celery_queue_name_set_new = set(BoostersManager.get_all_queues())
93
+ queue_names_str = ','.join(list(to_be_start_work_celery_queue_name_set_new))
94
+ if not to_be_start_work_celery_queue_name_set_new:
84
95
  raise Exception('celery worker 没有需要运行的queue')
85
- queue_names_str = ','.join(list(cls.to_be_start_work_celery_queue_name_set))
86
96
  # '--concurrency=200',
87
97
  # '--autoscale=5,500' threads 并发模式不支持自动扩大缩小并发数量,
88
98
  worker_name = worker_name or f'pid_{os.getpid()}'
@@ -97,7 +107,10 @@ class CeleryHelper:
97
107
  # 'worker_redirect_stdouts': False,
98
108
  'worker_concurrency': 200
99
109
  }
110
+
111
+ CeleryHelper.update_celery_app_conf({ 'worker_concurrency': 500})
100
112
  '''
113
+ cls.update_celery_app_conf({'worker_concurrency':worker_concurrency})
101
114
  argv = ['worker', f'--pool={pool_name}',
102
115
  '-n', f'worker_funboost_{worker_name}@%h', f'--loglevel={loglevel}',
103
116
  f'--queues={queue_names_str}', # 并发数量是 在app配置中已经制定了。自己用 update_celery_app_conf 方法更新就好了。
@@ -120,6 +120,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
120
120
  """
121
121
  # ConsumersManager.join_all_consumer_shedual_task_thread()
122
122
  if GlobalVars.has_start_a_consumer_flag:
123
+ # self.keep_circulating(10,block=True,)(time.sleep)()
123
124
  while 1:
124
125
  time.sleep(10)
125
126
 
@@ -287,12 +288,13 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
287
288
  pass
288
289
 
289
290
  def keep_circulating(self, time_sleep=0.001, exit_if_function_run_sucsess=False, is_display_detail_exception=True,
290
- block=True):
291
+ block=True, daemon=False):
291
292
  """间隔一段时间,一直循环运行某个方法的装饰器
292
293
  :param time_sleep :循环的间隔时间
293
294
  :param is_display_detail_exception
294
295
  :param exit_if_function_run_sucsess :如果成功了就退出循环
295
296
  :param block:是否阻塞在当前主线程运行。
297
+ :param daemon:是否守护线程
296
298
  """
297
299
 
298
300
  def _keep_circulating(func):
@@ -316,11 +318,12 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
316
318
  self.logger.error(msg=log_msg, exc_info=True)
317
319
  finally:
318
320
  time.sleep(time_sleep)
321
+ # print(func,time_sleep)
319
322
 
320
323
  if block:
321
324
  return ___keep_circulating()
322
325
  else:
323
- threading.Thread(target=___keep_circulating, ).start()
326
+ threading.Thread(target=___keep_circulating, daemon=daemon).start()
324
327
 
325
328
  return __keep_circulating
326
329
 
@@ -351,14 +354,14 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
351
354
  self._distributed_consumer_statistics.run()
352
355
  self.logger.warning(f'启动了分布式环境 使用 redis 的键 hearbeat:{self._queue_name} 统计活跃消费者 ,当前消费者唯一标识为 {self.consumer_identification}')
353
356
 
354
- self.keep_circulating(60, block=False)(self.check_heartbeat_and_message_count)() # 间隔时间最好比self._unit_time_for_count小整数倍,不然日志不准。
357
+ self.keep_circulating(60, block=False, daemon=False)(self.check_heartbeat_and_message_count)() # 间隔时间最好比self._unit_time_for_count小整数倍,不然日志不准。
355
358
  if self.consumer_params.is_support_remote_kill_task:
356
359
  kill_remote_task.RemoteTaskKiller(self.queue_name, None).start_cycle_kill_task()
357
360
  self.consumer_params.is_show_message_get_from_broker = True # 方便用户看到从消息队列取出来的消息的task_id,然后使用task_id杀死运行中的消息。
358
361
  if self.consumer_params.do_task_filtering:
359
362
  self._redis_filter.delete_expire_filter_task_cycle() # 这个默认是RedisFilter类,是个pass不运行。所以用别的消息中间件模式,不需要安装和配置redis。
360
363
  if self.consumer_params.schedule_tasks_on_main_thread:
361
- self.keep_circulating(1)(self._shedual_task)()
364
+ self.keep_circulating(1, daemon=False)(self._shedual_task)()
362
365
  else:
363
366
  self._concurrent_mode_dispatcher.schedulal_task_with_no_block()
364
367
 
@@ -1108,7 +1111,7 @@ class ConcurrentModeDispatcher(FunboostFileLoggerMixin):
1108
1111
  # ConsumersManager.schedulal_thread_to_be_join.append(g)
1109
1112
 
1110
1113
  def schedulal_task_with_no_block(self):
1111
- self.consumer.keep_circulating(1, block=False)(self.consumer._shedual_task)()
1114
+ self.consumer.keep_circulating(1, block=False, daemon=False)(self.consumer._shedual_task)()
1112
1115
 
1113
1116
 
1114
1117
  def wait_for_possible_has_finish_all_tasks_by_conusmer_list(consumer_list: typing.List[AbstractConsumer], minutes: int = 3):
@@ -1139,6 +1142,13 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
1139
1142
 
1140
1143
  3、从redis中获取停止和暂停状态,以便支持在别的地方发送命令停止或者暂停消费。
1141
1144
  """
1145
+ SHOW_CONSUMER_NUM_INTERVAL = 600
1146
+ HEARBEAT_EXPIRE_SECOND = 25
1147
+ SEND_HEARTBEAT_INTERVAL = 10
1148
+
1149
+ if HEARBEAT_EXPIRE_SECOND < SEND_HEARTBEAT_INTERVAL * 2:
1150
+ raise ValueError(f'HEARBEAT_EXPIRE_SECOND:{HEARBEAT_EXPIRE_SECOND} , SEND_HEARTBEAT_INTERVAL:{SEND_HEARTBEAT_INTERVAL} ')
1151
+
1142
1152
 
1143
1153
  def __init__(self, consumer: AbstractConsumer):
1144
1154
  # self._consumer_identification = consumer_identification
@@ -1157,8 +1167,7 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
1157
1167
 
1158
1168
  def run(self):
1159
1169
  self.send_heartbeat()
1160
- self._consumer.keep_circulating(10, block=False)(self.send_heartbeat)()
1161
- # decorators.keep_circulating(5, block=False)(self._show_active_consumer_num)() # 主要是为快速频繁统计分布式消费者个数,快速调整分布式qps控频率。
1170
+ self._consumer.keep_circulating(self.SEND_HEARTBEAT_INTERVAL, block=False, daemon=False)(self.send_heartbeat)()
1162
1171
 
1163
1172
  def _send_heartbeat_with_dict_value(self, redis_key, ):
1164
1173
  # 发送当前消费者进程心跳的,值是字典,按一个机器或者一个队列运行了哪些进程。
@@ -1167,7 +1176,7 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
1167
1176
  with self.redis_db_frame.pipeline() as p:
1168
1177
  for result in results:
1169
1178
  result_dict = Serialization.to_dict(result)
1170
- if self.timestamp() - result_dict['hearbeat_timestamp'] > 15 \
1179
+ if self.timestamp() - result_dict['hearbeat_timestamp'] > self.HEARBEAT_EXPIRE_SECOND \
1171
1180
  or self._consumer_identification_map['consumer_uuid'] == result_dict['consumer_uuid']:
1172
1181
  # 因为这个是10秒钟运行一次,15秒还没更新,那肯定是掉线了。如果消费者本身是自己也先删除。
1173
1182
  p.srem(redis_key, result)
@@ -1179,10 +1188,11 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
1179
1188
 
1180
1189
  def send_heartbeat(self):
1181
1190
  # 根据队列名心跳的,值是字符串,方便值作为其他redis的键名
1191
+
1182
1192
  results = self.redis_db_frame.smembers(self._redis_key_name)
1183
1193
  with self.redis_db_frame.pipeline() as p:
1184
1194
  for result in results:
1185
- if self.timestamp() - float(result.split('&&')[-1]) > 15 or \
1195
+ if self.timestamp() - float(result.split('&&')[-1]) > self.HEARBEAT_EXPIRE_SECOND or \
1186
1196
  self._consumer_identification == result.split('&&')[0]: # 因为这个是10秒钟运行一次,15秒还没更新,那肯定是掉线了。如果消费者本身是自己也先删除。
1187
1197
  p.srem(self._redis_key_name, result)
1188
1198
  p.sadd(self._redis_key_name, f'{self._consumer_identification}&&{self.timestamp()}')
@@ -1193,9 +1203,10 @@ class DistributedConsumerStatistics(RedisMixin, FunboostFileLoggerMixin):
1193
1203
  self._show_active_consumer_num()
1194
1204
  self._get_stop_and_pause_flag_from_redis()
1195
1205
 
1206
+
1196
1207
  def _show_active_consumer_num(self):
1197
1208
  self.active_consumer_num = self.redis_db_frame.scard(self._redis_key_name) or 1
1198
- if time.time() - self._last_show_consumer_num_timestamp > 600:
1209
+ if time.time() - self._last_show_consumer_num_timestamp > self.SHOW_CONSUMER_NUM_INTERVAL:
1199
1210
  self.logger.info(f'分布式所有环境中使用 {self._queue_name} 队列的,一共有 {self.active_consumer_num} 个消费者')
1200
1211
  self._last_show_consumer_num_timestamp = time.time()
1201
1212
 
@@ -180,7 +180,7 @@ class CeleryConsumer(AbstractConsumer):
180
180
  log_msg = f'fun: {self.consuming_function} args: {args} , kwargs: {kwargs} 消息达到最大重试次数{this.request.retries}次仍然出错, {exc} \n'
181
181
  self.logger.critical(log_msg, exc_info=self.consumer_params.is_print_detail_exception)
182
182
  # 发生异常,尝试重试任务,countdown 是多少秒后重试
183
- raise this.retry(exc=exc, countdown=5)
183
+ raise this.retry(exc=exc, countdown=self.consumer_params.retry_interval)
184
184
 
185
185
  celery_app.conf.task_routes.update({self.queue_name: {"queue": self.queue_name}}) # 自动配置celery每个函数使用不同的队列名。
186
186
  self.celery_task = f
@@ -27,7 +27,7 @@ class ConsumerConfirmMixinWithTheHelpOfRedis(RedisMixin):
27
27
  self._unack_zset_name = f'{self._queue_name}__unack'
28
28
 
29
29
  def start_consuming_message(self):
30
- self._is_send_consumer_hearbeat_to_redis = True
30
+ self.consumer_params.is_send_consumer_hearbeat_to_redis = True
31
31
  super().start_consuming_message()
32
32
  self.keep_circulating(60, block=False)(self._requeue_tasks_which_unconfirmed)()
33
33
 
@@ -62,14 +62,14 @@ class ConsumerConfirmMixinWithTheHelpOfRedisByHearbeat(ConsumerConfirmMixinWithT
62
62
  # noinspection PyAttributeOutsideInit
63
63
  def custom_init(self):
64
64
  self._unack_zset_name = f'{self._queue_name}__unack_id_{self.consumer_identification}'
65
- self._is_send_consumer_hearbeat_to_redis = True
65
+ self.consumer_params.is_send_consumer_hearbeat_to_redis = True
66
66
  self._last_show_unacked_msg_num_log = 0
67
67
 
68
68
  def _requeue_tasks_which_unconfirmed(self):
69
69
  lock_key = f'fsdf_lock__requeue_tasks_which_unconfirmed:{self._queue_name}'
70
70
  with decorators.RedisDistributedLockContextManager(self.redis_db_frame, lock_key, ).set_log_level(30) as lock:
71
71
  if lock.has_aquire_lock:
72
- self._distributed_consumer_statistics.send_heartbeat()
72
+ # self._distributed_consumer_statistics.send_heartbeat() # 已经周期运行了。
73
73
  current_queue_hearbeat_ids = self._distributed_consumer_statistics.get_queue_heartbeat_ids(without_time=True)
74
74
  current_queue_unacked_msg_queues = self.redis_db_frame.scan(0, f'{self._queue_name}__unack_id_*', count=self.SCAN_COUNT) # 不要在funboost的队列所在db放弃他缓存keys,要保持db的keys少于1000,否则要多次scan。
75
75
  # print(current_queue_unacked_msg_queues)
@@ -17,7 +17,7 @@ class RedisBrpopLpushConsumer(AbstractConsumer, RedisMixin):
17
17
 
18
18
 
19
19
  def start_consuming_message(self):
20
- self._is_send_consumer_hearbeat_to_redis = True
20
+ self.consumer_params.is_send_consumer_hearbeat_to_redis = True
21
21
  super().start_consuming_message()
22
22
  self.keep_circulating(60, block=False)(self._requeue_tasks_which_unconfirmed)()
23
23
 
@@ -29,7 +29,7 @@ class RedisConsumerAckUsingTimeout(AbstractConsumer, RedisMixin):
29
29
  self._last_show_unack_ts = time.time()
30
30
 
31
31
  def start_consuming_message(self):
32
- self._is_send_consumer_hearbeat_to_redis = True
32
+ self.consumer_params.is_send_consumer_hearbeat_to_redis = True
33
33
  super().start_consuming_message()
34
34
  self.keep_circulating(10, block=False)(self._requeue_tasks_which_unconfirmed)()
35
35
 
@@ -28,7 +28,7 @@ class RedisStreamConsumer(AbstractConsumer, RedisMixin):
28
28
  if self.redis_db_frame.type(self._queue_name) == 'list':
29
29
  raise EnvironmentError(f'检测到已存在 {self._queue_name} 这个键,且类型是list, 必须换个队列名字或者删除这个 list 类型的键。'
30
30
  f'RedisStreamConsumer 使用的是 stream 数据结构')
31
- self._is_send_consumer_hearbeat_to_redis = True
31
+ self.consumer_params.is_send_consumer_hearbeat_to_redis = True
32
32
  super().start_consuming_message()
33
33
  self.keep_circulating(60, block=False)(self._requeue_tasks_which_unconfirmed)()
34
34
 
@@ -315,14 +315,15 @@ class BoostersManager:
315
315
  consume = consume_queues
316
316
 
317
317
  @classmethod
318
- def consume_all_queues(cls):
318
+ def consume_all_queues(cls,block=True):
319
319
  """
320
320
  启动所有消息队列名的消费,无需一个一个函数亲自 funxx.consume()来启动,多个函数队列在当前同一个进程内启动消费.
321
321
  这种方式节约总的内存,但无法利用多核cpu
322
322
  """
323
323
  for queue_name in cls.get_all_queues():
324
324
  cls.get_booster(queue_name).consume()
325
- ctrl_c_recv()
325
+ if block:
326
+ ctrl_c_recv()
326
327
 
327
328
  consume_all = consume_all_queues
328
329
 
@@ -3,5 +3,5 @@ def _try_get_user_funboost_common_config(funboost_common_conf_field:str):
3
3
  import funboost_config # 第一次启动funboost前还没这个文件,或者还没有初始化配置之前,就要使用使用配置.
4
4
  return getattr(funboost_config.FunboostCommonConfig,funboost_common_conf_field)
5
5
  except Exception as e:
6
- print(e)
6
+ # print(e)
7
7
  return None
@@ -15,7 +15,7 @@ def get_publish_time(paramsx: dict):
15
15
 
16
16
 
17
17
  def delete_keys_and_return_new_dict(dictx: dict, keys: list = None):
18
- dict_new = copy.copy(dictx) # 主要是去掉一级键 publish_time,浅拷贝即可。新的消息已经不是这样了。
18
+ dict_new = copy.deepcopy(dictx) # 主要是去掉一级键 publish_time,浅拷贝即可。新的消息已经不是这样了。
19
19
  keys = ['publish_time', 'publish_time_format', 'extra'] if keys is None else keys
20
20
  for dict_key in keys:
21
21
  try:
@@ -20,7 +20,7 @@ NO_RESULT = 'no_result'
20
20
 
21
21
 
22
22
  class AsyncResult(RedisMixin):
23
- default_callback_run_executor = FlexibleThreadPoolMinWorkers0(200,work_queue_maxsize=10000)
23
+ default_callback_run_executor = FlexibleThreadPoolMinWorkers0(200,work_queue_maxsize=50)
24
24
 
25
25
  @property
26
26
  def callback_run_executor(self, ):
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 45.9
4
- Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
3
+ Version: 46.1
4
+ Summary: pip install funboost,python全功能分布式函数调度框架,funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
5
5
  Home-page: https://github.com/ydf0509/funboost
6
6
  Author: bfzs
7
7
  Author-email: ydf0509@sohu.com
@@ -49,6 +49,8 @@ License-File: LICENSE
49
49
  <pre style="color: greenyellow;background-color: #0c1119; font-size: medium;">
50
50
  pip install funboost ,python全功能分布式函数调度框架。 demo用法例子见文档1.3
51
51
 
52
+ funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。
53
+
52
54
  只需要一行@boost代码即可分布式执行python一切任意函数,99%用过funboost的pythoner 感受是 方便 快速 强大。
53
55
  支持python所有类型的并发模式,消息队列方面支持全球一切知名消息队列中间件和模拟的实现消息队列,
54
56
  同时funboost支持celery整个框架作为核心来发布和消费消息,使用funboost的极简api方式来自动化配置和利用celery调度,
@@ -101,6 +103,7 @@ funboost的旧框架名字是function_scheduling_distributed_framework , 关系
101
103
  [查看分布式函数调度框架文档 https://funboost.readthedocs.io/zh-cn/latest/index.html](https://funboost.readthedocs.io/zh-cn/latest/index.html)
102
104
 
103
105
 
106
+
104
107
  [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)
105
108
 
106
109
  ```
@@ -33,7 +33,7 @@ setup(
33
33
  name='funboost', #
34
34
  version=__version__,
35
35
  description=(
36
- 'pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚 '
36
+ 'pip install funboost,python全功能分布式函数调度框架,funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚 '
37
37
  ),
38
38
  # long_description=open('README.md', 'r',encoding='utf8').read(),
39
39
  keywords=["funboost", "distributed-framework", "function-scheduling", "rabbitmq", "rocketmq", "kafka", "nsq", "redis", "disk",
File without changes
File without changes
File without changes
File without changes
File without changes