funboost 46.6__tar.gz → 46.8__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 (292) hide show
  1. {funboost-46.6/funboost.egg-info → funboost-46.8}/PKG-INFO +1 -1
  2. {funboost-46.6 → funboost-46.8}/funboost/__init__.py +1 -1
  3. {funboost-46.6 → funboost-46.8}/funboost/consumers/base_consumer.py +15 -5
  4. {funboost-46.6 → funboost-46.8}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +7 -6
  5. {funboost-46.6 → funboost-46.8}/funboost/core/booster.py +1 -1
  6. {funboost-46.6 → funboost-46.8}/funboost/timing_job/__init__.py +33 -4
  7. {funboost-46.6 → funboost-46.8}/funboost/timing_job/apscheduler_use_mysql_store.py +1 -0
  8. funboost-46.8/funboost/timing_job/apscheduler_use_redis_store.py +61 -0
  9. {funboost-46.6 → funboost-46.8}/funboost/utils/decorators.py +27 -0
  10. {funboost-46.6 → funboost-46.8/funboost.egg-info}/PKG-INFO +1 -1
  11. funboost-46.6/funboost/timing_job/apscheduler_use_redis_store.py +0 -30
  12. {funboost-46.6 → funboost-46.8}/LICENSE +0 -0
  13. {funboost-46.6 → funboost-46.8}/MANIFEST.in +0 -0
  14. {funboost-46.6 → funboost-46.8}/README.md +0 -0
  15. {funboost-46.6 → funboost-46.8}/funboost/__init__old.py +0 -0
  16. {funboost-46.6 → funboost-46.8}/funboost/__main__.py +0 -0
  17. {funboost-46.6 → funboost-46.8}/funboost/assist/__init__.py +0 -0
  18. {funboost-46.6 → funboost-46.8}/funboost/assist/celery_helper.py +0 -0
  19. {funboost-46.6 → funboost-46.8}/funboost/assist/dramatiq_helper.py +0 -0
  20. {funboost-46.6 → funboost-46.8}/funboost/assist/faststream_helper.py +0 -0
  21. {funboost-46.6 → funboost-46.8}/funboost/assist/huey_helper.py +0 -0
  22. {funboost-46.6 → funboost-46.8}/funboost/assist/rocketry_helper.py +0 -0
  23. {funboost-46.6 → funboost-46.8}/funboost/assist/rq_helper.py +0 -0
  24. {funboost-46.6 → funboost-46.8}/funboost/assist/rq_windows_worker.py +0 -0
  25. {funboost-46.6 → funboost-46.8}/funboost/assist/taskiq_helper.py +0 -0
  26. {funboost-46.6 → funboost-46.8}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
  27. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/__init__.py +0 -0
  28. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/async_helper.py +0 -0
  29. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/async_pool_executor.py +0 -0
  30. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/backup/__init__.py +0 -0
  31. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
  32. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
  33. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
  34. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/base_pool_type.py +0 -0
  35. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
  36. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
  37. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
  38. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
  39. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
  40. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
  41. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/custom_threadpool_executor.py +0 -0
  42. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
  43. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
  44. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
  45. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/pool_commons.py +0 -0
  46. {funboost-46.6 → funboost-46.8}/funboost/concurrent_pool/single_thread_executor.py +0 -0
  47. {funboost-46.6 → funboost-46.8}/funboost/constant.py +0 -0
  48. {funboost-46.6 → funboost-46.8}/funboost/consumers/__init__.py +0 -0
  49. {funboost-46.6 → funboost-46.8}/funboost/consumers/celery_consumer.py +0 -0
  50. {funboost-46.6 → funboost-46.8}/funboost/consumers/confirm_mixin.py +0 -0
  51. {funboost-46.6 → funboost-46.8}/funboost/consumers/dramatiq_consumer.py +0 -0
  52. {funboost-46.6 → funboost-46.8}/funboost/consumers/empty_consumer.py +0 -0
  53. {funboost-46.6 → funboost-46.8}/funboost/consumers/faststream_consumer.py +0 -0
  54. {funboost-46.6 → funboost-46.8}/funboost/consumers/http_consumer.py +0 -0
  55. {funboost-46.6 → funboost-46.8}/funboost/consumers/http_consumer000.py +0 -0
  56. {funboost-46.6 → funboost-46.8}/funboost/consumers/httpsqs_consumer.py +0 -0
  57. {funboost-46.6 → funboost-46.8}/funboost/consumers/huey_consumer.py +0 -0
  58. {funboost-46.6 → funboost-46.8}/funboost/consumers/kafka_consumer.py +0 -0
  59. {funboost-46.6 → funboost-46.8}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
  60. {funboost-46.6 → funboost-46.8}/funboost/consumers/kombu_consumer.py +0 -0
  61. {funboost-46.6 → funboost-46.8}/funboost/consumers/local_python_queue_consumer.py +0 -0
  62. {funboost-46.6 → funboost-46.8}/funboost/consumers/memory_deque_consumer.py +0 -0
  63. {funboost-46.6 → funboost-46.8}/funboost/consumers/mongomq_consumer.py +0 -0
  64. {funboost-46.6 → funboost-46.8}/funboost/consumers/mqtt_consumer.py +0 -0
  65. {funboost-46.6 → funboost-46.8}/funboost/consumers/nameko_consumer.py +0 -0
  66. {funboost-46.6 → funboost-46.8}/funboost/consumers/nats_consumer.py +0 -0
  67. {funboost-46.6 → funboost-46.8}/funboost/consumers/nsq_consumer.py +0 -0
  68. {funboost-46.6 → funboost-46.8}/funboost/consumers/peewee_conusmer.py +0 -0
  69. {funboost-46.6 → funboost-46.8}/funboost/consumers/persist_queue_consumer.py +0 -0
  70. {funboost-46.6 → funboost-46.8}/funboost/consumers/pulsar_consumer.py +0 -0
  71. {funboost-46.6 → funboost-46.8}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
  72. {funboost-46.6 → funboost-46.8}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
  73. {funboost-46.6 → funboost-46.8}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
  74. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
  75. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_consumer.py +0 -0
  76. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_consumer_ack_able.py +0 -0
  77. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_consumer_ack_using_timeout.py +0 -0
  78. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_consumer_priority.py +0 -0
  79. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_consumer_simple.py +0 -0
  80. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_filter.py +0 -0
  81. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_pubsub_consumer.py +0 -0
  82. {funboost-46.6 → funboost-46.8}/funboost/consumers/redis_stream_consumer.py +0 -0
  83. {funboost-46.6 → funboost-46.8}/funboost/consumers/rocketmq_consumer.py +0 -0
  84. {funboost-46.6 → funboost-46.8}/funboost/consumers/rq_consumer.py +0 -0
  85. {funboost-46.6 → funboost-46.8}/funboost/consumers/sqlachemy_consumer.py +0 -0
  86. {funboost-46.6 → funboost-46.8}/funboost/consumers/tcp_consumer.py +0 -0
  87. {funboost-46.6 → funboost-46.8}/funboost/consumers/txt_file_consumer.py +0 -0
  88. {funboost-46.6 → funboost-46.8}/funboost/consumers/udp_consumer.py +0 -0
  89. {funboost-46.6 → funboost-46.8}/funboost/consumers/zeromq_consumer.py +0 -0
  90. {funboost-46.6 → funboost-46.8}/funboost/contrib/__init__.py +0 -0
  91. {funboost-46.6 → funboost-46.8}/funboost/contrib/api_publish_msg.py +0 -0
  92. {funboost-46.6 → funboost-46.8}/funboost/contrib/django_db_deco.py +0 -0
  93. {funboost-46.6 → funboost-46.8}/funboost/contrib/queue2queue.py +0 -0
  94. {funboost-46.6 → funboost-46.8}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
  95. {funboost-46.6 → funboost-46.8}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
  96. {funboost-46.6 → funboost-46.8}/funboost/core/__init__.py +0 -0
  97. {funboost-46.6 → funboost-46.8}/funboost/core/active_cousumer_info_getter.py +0 -0
  98. {funboost-46.6 → funboost-46.8}/funboost/core/cli/__init__.py +0 -0
  99. {funboost-46.6 → funboost-46.8}/funboost/core/cli/discovery_boosters.py +0 -0
  100. {funboost-46.6 → funboost-46.8}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
  101. {funboost-46.6 → funboost-46.8}/funboost/core/cli/funboost_fire.py +0 -0
  102. {funboost-46.6 → funboost-46.8}/funboost/core/current_task.py +0 -0
  103. {funboost-46.6 → funboost-46.8}/funboost/core/exceptions.py +0 -0
  104. {funboost-46.6 → funboost-46.8}/funboost/core/fabric_deploy_helper.py +0 -0
  105. {funboost-46.6 → funboost-46.8}/funboost/core/funboost_config_getter.py +0 -0
  106. {funboost-46.6 → funboost-46.8}/funboost/core/funboost_time.py +0 -0
  107. {funboost-46.6 → funboost-46.8}/funboost/core/func_params_model.py +0 -0
  108. {funboost-46.6 → funboost-46.8}/funboost/core/function_result_status_config.py +0 -0
  109. {funboost-46.6 → funboost-46.8}/funboost/core/function_result_status_saver.py +0 -0
  110. {funboost-46.6 → funboost-46.8}/funboost/core/helper_funs.py +0 -0
  111. {funboost-46.6 → funboost-46.8}/funboost/core/kill_remote_task.py +0 -0
  112. {funboost-46.6 → funboost-46.8}/funboost/core/lazy_impoter.py +0 -0
  113. {funboost-46.6 → funboost-46.8}/funboost/core/loggers.py +0 -0
  114. {funboost-46.6 → funboost-46.8}/funboost/core/msg_result_getter.py +0 -0
  115. {funboost-46.6 → funboost-46.8}/funboost/core/muliti_process_enhance.py +0 -0
  116. {funboost-46.6 → funboost-46.8}/funboost/core/serialization.py +0 -0
  117. {funboost-46.6 → funboost-46.8}/funboost/core/task_id_logger.py +0 -0
  118. {funboost-46.6 → funboost-46.8}/funboost/factories/__init__.py +0 -0
  119. {funboost-46.6 → funboost-46.8}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
  120. {funboost-46.6 → funboost-46.8}/funboost/factories/consumer_factory.py +0 -0
  121. {funboost-46.6 → funboost-46.8}/funboost/factories/publisher_factotry.py +0 -0
  122. {funboost-46.6 → funboost-46.8}/funboost/funboost_config_deafult.py +0 -0
  123. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
  124. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
  125. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/app.py +0 -0
  126. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/functions.py +0 -0
  127. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/assets/css/custom.css +0 -0
  128. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
  129. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
  130. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/assets/js/custom.js +0 -0
  131. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
  132. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/css/style.css +0 -0
  133. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/images/bg.jpg +0 -0
  134. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/images/password.png +0 -0
  135. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/images/tick.png +0 -0
  136. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/images/user.png +0 -0
  137. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
  138. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/templates/index.html +0 -0
  139. {funboost-46.6 → funboost-46.8}/funboost/function_result_web/templates/login.html +0 -0
  140. {funboost-46.6 → funboost-46.8}/funboost/publishers/__init__.py +0 -0
  141. {funboost-46.6 → funboost-46.8}/funboost/publishers/base_publisher.py +0 -0
  142. {funboost-46.6 → funboost-46.8}/funboost/publishers/celery_publisher.py +0 -0
  143. {funboost-46.6 → funboost-46.8}/funboost/publishers/celery_publisher000.py +0 -0
  144. {funboost-46.6 → funboost-46.8}/funboost/publishers/confluent_kafka_publisher.py +0 -0
  145. {funboost-46.6 → funboost-46.8}/funboost/publishers/dramatiq_publisher.py +0 -0
  146. {funboost-46.6 → funboost-46.8}/funboost/publishers/empty_publisher.py +0 -0
  147. {funboost-46.6 → funboost-46.8}/funboost/publishers/faststream_publisher.py +0 -0
  148. {funboost-46.6 → funboost-46.8}/funboost/publishers/http_publisher.py +0 -0
  149. {funboost-46.6 → funboost-46.8}/funboost/publishers/httpsqs_publisher.py +0 -0
  150. {funboost-46.6 → funboost-46.8}/funboost/publishers/huey_publisher.py +0 -0
  151. {funboost-46.6 → funboost-46.8}/funboost/publishers/kafka_publisher.py +0 -0
  152. {funboost-46.6 → funboost-46.8}/funboost/publishers/kombu_publisher.py +0 -0
  153. {funboost-46.6 → funboost-46.8}/funboost/publishers/local_python_queue_publisher.py +0 -0
  154. {funboost-46.6 → funboost-46.8}/funboost/publishers/meomory_deque_publisher.py +0 -0
  155. {funboost-46.6 → funboost-46.8}/funboost/publishers/mongomq_publisher.py +0 -0
  156. {funboost-46.6 → funboost-46.8}/funboost/publishers/mqtt_publisher.py +0 -0
  157. {funboost-46.6 → funboost-46.8}/funboost/publishers/nameko_publisher.py +0 -0
  158. {funboost-46.6 → funboost-46.8}/funboost/publishers/nats_publisher.py +0 -0
  159. {funboost-46.6 → funboost-46.8}/funboost/publishers/nsq_publisher.py +0 -0
  160. {funboost-46.6 → funboost-46.8}/funboost/publishers/peewee_publisher.py +0 -0
  161. {funboost-46.6 → funboost-46.8}/funboost/publishers/persist_queue_publisher.py +0 -0
  162. {funboost-46.6 → funboost-46.8}/funboost/publishers/pulsar_publisher.py +0 -0
  163. {funboost-46.6 → funboost-46.8}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
  164. {funboost-46.6 → funboost-46.8}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
  165. {funboost-46.6 → funboost-46.8}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
  166. {funboost-46.6 → funboost-46.8}/funboost/publishers/redis_publisher.py +0 -0
  167. {funboost-46.6 → funboost-46.8}/funboost/publishers/redis_publisher_lpush.py +0 -0
  168. {funboost-46.6 → funboost-46.8}/funboost/publishers/redis_publisher_priority.py +0 -0
  169. {funboost-46.6 → funboost-46.8}/funboost/publishers/redis_publisher_simple.py +0 -0
  170. {funboost-46.6 → funboost-46.8}/funboost/publishers/redis_pubsub_publisher.py +0 -0
  171. {funboost-46.6 → funboost-46.8}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
  172. {funboost-46.6 → funboost-46.8}/funboost/publishers/redis_stream_publisher.py +0 -0
  173. {funboost-46.6 → funboost-46.8}/funboost/publishers/rocketmq_publisher.py +0 -0
  174. {funboost-46.6 → funboost-46.8}/funboost/publishers/rq_publisher.py +0 -0
  175. {funboost-46.6 → funboost-46.8}/funboost/publishers/sqla_queue_publisher.py +0 -0
  176. {funboost-46.6 → funboost-46.8}/funboost/publishers/tcp_publisher.py +0 -0
  177. {funboost-46.6 → funboost-46.8}/funboost/publishers/txt_file_publisher.py +0 -0
  178. {funboost-46.6 → funboost-46.8}/funboost/publishers/udp_publisher.py +0 -0
  179. {funboost-46.6 → funboost-46.8}/funboost/publishers/zeromq_publisher.py +0 -0
  180. {funboost-46.6 → funboost-46.8}/funboost/queues/__init__.py +0 -0
  181. {funboost-46.6 → funboost-46.8}/funboost/queues/memory_queues_map.py +0 -0
  182. {funboost-46.6 → funboost-46.8}/funboost/queues/peewee_queue.py +0 -0
  183. {funboost-46.6 → funboost-46.8}/funboost/queues/sqla_queue.py +0 -0
  184. {funboost-46.6 → funboost-46.8}/funboost/set_frame_config.py +0 -0
  185. {funboost-46.6 → funboost-46.8}/funboost/utils/__init__.py +0 -0
  186. {funboost-46.6 → funboost-46.8}/funboost/utils/apscheduler_monkey.py +0 -0
  187. {funboost-46.6 → funboost-46.8}/funboost/utils/block_exit.py +0 -0
  188. {funboost-46.6 → funboost-46.8}/funboost/utils/bulk_operation.py +0 -0
  189. {funboost-46.6 → funboost-46.8}/funboost/utils/class_utils.py +0 -0
  190. {funboost-46.6 → funboost-46.8}/funboost/utils/ctrl_c_end.py +0 -0
  191. {funboost-46.6 → funboost-46.8}/funboost/utils/custom_pysnooper.py +0 -0
  192. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages/__init__.py +0 -0
  193. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
  194. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
  195. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
  196. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
  197. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
  198. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
  199. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
  200. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
  201. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
  202. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
  203. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
  204. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
  205. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
  206. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
  207. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
  208. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
  209. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
  210. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
  211. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
  212. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
  213. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
  214. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
  215. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
  216. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
  217. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
  218. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
  219. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
  220. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
  221. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
  222. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
  223. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
  224. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
  225. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
  226. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
  227. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
  228. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
  229. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
  230. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
  231. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
  232. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
  233. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
  234. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
  235. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
  236. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -0
  237. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
  238. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
  239. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
  240. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
  241. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
  242. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
  243. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
  244. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
  245. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
  246. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
  247. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
  248. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
  249. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
  250. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
  251. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
  252. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
  253. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
  254. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
  255. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
  256. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
  257. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc2222.py +0 -0
  258. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
  259. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
  260. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
  261. {funboost-46.6 → funboost-46.8}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -0
  262. {funboost-46.6 → funboost-46.8}/funboost/utils/develop_log.py +0 -0
  263. {funboost-46.6 → funboost-46.8}/funboost/utils/expire_lock.py +0 -0
  264. {funboost-46.6 → funboost-46.8}/funboost/utils/json_helper.py +0 -0
  265. {funboost-46.6 → funboost-46.8}/funboost/utils/mongo_util.py +0 -0
  266. {funboost-46.6 → funboost-46.8}/funboost/utils/monkey_color_log.py +0 -0
  267. {funboost-46.6 → funboost-46.8}/funboost/utils/monkey_patches.py +0 -0
  268. {funboost-46.6 → funboost-46.8}/funboost/utils/mqtt_util.py +0 -0
  269. {funboost-46.6 → funboost-46.8}/funboost/utils/paramiko_util.py +0 -0
  270. {funboost-46.6 → funboost-46.8}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
  271. {funboost-46.6 → funboost-46.8}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
  272. {funboost-46.6 → funboost-46.8}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
  273. {funboost-46.6 → funboost-46.8}/funboost/utils/pysnooper_ydf/utils.py +0 -0
  274. {funboost-46.6 → funboost-46.8}/funboost/utils/pysnooper_ydf/variables.py +0 -0
  275. {funboost-46.6 → funboost-46.8}/funboost/utils/rabbitmq_factory.py +0 -0
  276. {funboost-46.6 → funboost-46.8}/funboost/utils/redis_manager.py +0 -0
  277. {funboost-46.6 → funboost-46.8}/funboost/utils/redis_manager_old.py +0 -0
  278. {funboost-46.6 → funboost-46.8}/funboost/utils/resource_monitoring.py +0 -0
  279. {funboost-46.6 → funboost-46.8}/funboost/utils/restart_python.py +0 -0
  280. {funboost-46.6 → funboost-46.8}/funboost/utils/simple_data_class.py +0 -0
  281. {funboost-46.6 → funboost-46.8}/funboost/utils/str_utils.py +0 -0
  282. {funboost-46.6 → funboost-46.8}/funboost/utils/time_util.py +0 -0
  283. {funboost-46.6 → funboost-46.8}/funboost/utils/times/__init__.py +0 -0
  284. {funboost-46.6 → funboost-46.8}/funboost/utils/times/version.py +0 -0
  285. {funboost-46.6 → funboost-46.8}/funboost/utils/un_strict_json_dumps.py +0 -0
  286. {funboost-46.6 → funboost-46.8}/funboost.egg-info/SOURCES.txt +0 -0
  287. {funboost-46.6 → funboost-46.8}/funboost.egg-info/dependency_links.txt +0 -0
  288. {funboost-46.6 → funboost-46.8}/funboost.egg-info/entry_points.txt +0 -0
  289. {funboost-46.6 → funboost-46.8}/funboost.egg-info/requires.txt +0 -0
  290. {funboost-46.6 → funboost-46.8}/funboost.egg-info/top_level.txt +0 -0
  291. {funboost-46.6 → funboost-46.8}/setup.cfg +0 -0
  292. {funboost-46.6 → funboost-46.8}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 46.6
3
+ Version: 46.8
4
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
@@ -13,7 +13,7 @@ set_frame_config这个模块的 use_config_form_funboost_config_module() 是核
13
13
  这段注释说明和使用的用户无关,只和框架开发人员有关.
14
14
  '''
15
15
 
16
- __version__ = "46.6"
16
+ __version__ = "46.8"
17
17
 
18
18
  from funboost.set_frame_config import show_frame_config
19
19
 
@@ -40,6 +40,7 @@ from funboost.core.serialization import Serialization
40
40
  from funboost.core.task_id_logger import TaskIdLogger
41
41
  from funboost.constant import FunctionKind
42
42
 
43
+
43
44
  from nb_libs.path_helper import PathHelper
44
45
  from nb_log import (get_logger, LoggerLevelSetterMixin, LogManager, is_main_process,
45
46
  nb_log_config_default)
@@ -368,6 +369,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
368
369
 
369
370
  def _start_delay_task_scheduler(self):
370
371
  from funboost.timing_job import FsdfBackgroundScheduler
372
+ from funboost.timing_job.apscheduler_use_redis_store import FunboostBackgroundSchedulerProcessJobsWithinRedisLock
371
373
  # print(self.consumer_params.delay_task_apsscheduler_jobstores_kind )
372
374
  if self.consumer_params.delay_task_apscheduler_jobstores_kind == 'redis':
373
375
  jobstores = {
@@ -376,14 +378,21 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
376
378
  run_times_key=f'funboost.apscheduler.{self.queue_name}.run_times',
377
379
  )
378
380
  }
381
+ self._delay_task_scheduler = FunboostBackgroundSchedulerProcessJobsWithinRedisLock(timezone=FunboostCommonConfig.TIMEZONE, daemon=False,
382
+ jobstores=jobstores # push 方法的序列化带thredignn.lock
383
+ )
384
+ self._delay_task_scheduler.set_process_jobs_redis_lock_key(f'funboost.BackgroundSchedulerProcessJobsWithinRedisLock.{self.queue_name}')
379
385
  elif self.consumer_params.delay_task_apscheduler_jobstores_kind == 'memory':
380
386
  jobstores = {"default": MemoryJobStore()}
387
+ self._delay_task_scheduler = FsdfBackgroundScheduler(timezone=FunboostCommonConfig.TIMEZONE, daemon=False,
388
+ jobstores=jobstores # push 方法的序列化带thredignn.lock
389
+ )
390
+
381
391
  else:
382
392
  raise Exception(f'delay_task_apsscheduler_jobstores_kind is error: {self.consumer_params.delay_task_apscheduler_jobstores_kind}')
383
- self._delay_task_scheduler = FsdfBackgroundScheduler(timezone=FunboostCommonConfig.TIMEZONE, daemon=False,
384
- jobstores=jobstores # push 方法的序列化带thredignn.lock
385
- )
386
- self._delay_task_scheduler.add_executor(ApschedulerThreadPoolExecutor(2)) # 只是运行submit任务到并发池,不需要很多线程。
393
+
394
+
395
+ # self._delay_task_scheduler.add_executor(ApschedulerThreadPoolExecutor(2)) # 只是运行submit任务到并发池,不需要很多线程。
387
396
  # self._delay_task_scheduler.add_listener(self._apscheduler_job_miss, EVENT_JOB_MISSED)
388
397
  self._delay_task_scheduler.start()
389
398
 
@@ -500,7 +509,8 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
500
509
  # 数据库作为apscheduler的jobstores时候, 不能用 self.pbulisher_of_same_queue.publish,self不能序列化
501
510
  self._delay_task_scheduler.add_job(self._push_for_apscheduler_use_database_store, 'date', run_date=run_date,
502
511
  kwargs={'queue_name': self.queue_name, 'msg': msg_no_delay, 'runonce_uuid': str(uuid.uuid4())},
503
- misfire_grace_time=misfire_grace_time)
512
+ misfire_grace_time=misfire_grace_time,
513
+ )
504
514
  self._confirm_consume(kw)
505
515
 
506
516
  else: # 普通任务
@@ -14,7 +14,7 @@ class RabbitmqConsumerAmqpStorm(AbstractConsumer):
14
14
  使用AmqpStorm实现的,多线程安全的,不用加锁。
15
15
  funboost 强烈推荐使用这个做消息队列中间件。
16
16
  """
17
- BROKER_EXCLUSIVE_CONFIG_DEFAULT = {'x-max-priority': None} # x-max-priority 是 rabbitmq的优先级队列配置,必须为整数,强烈建议要小于5。为None就代表队列不支持优先级。
17
+ BROKER_EXCLUSIVE_CONFIG_DEFAULT = {'x-max-priority': None,'no_ack':False} # x-max-priority 是 rabbitmq的优先级队列配置,必须为整数,强烈建议要小于5。为None就代表队列不支持优先级。
18
18
 
19
19
  def _shedual_task(self):
20
20
  # noinspection PyTypeChecker
@@ -28,16 +28,17 @@ class RabbitmqConsumerAmqpStorm(AbstractConsumer):
28
28
  broker_exclusive_config=self.consumer_params.broker_exclusive_config))
29
29
  rp.init_broker()
30
30
  rp.channel_wrapper_by_ampqstormbaic.qos(self.consumer_params.concurrent_num)
31
- rp.channel_wrapper_by_ampqstormbaic.consume(callback=callback, queue=self.queue_name, no_ack=False,
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
33
  rp.channel.start_consuming(auto_decode=True)
34
34
 
35
35
  def _confirm_consume(self, kw):
36
36
  # noinspection PyBroadException
37
- try:
38
- kw['amqpstorm_message'].ack() # 确认消费
39
- except BaseException as e:
40
- self.logger.error(f'AmqpStorm确认消费失败 {type(e)} {e}')
37
+ if self.consumer_params.broker_exclusive_config['no_ack'] is False:
38
+ try:
39
+ kw['amqpstorm_message'].ack() # 确认消费
40
+ except BaseException as e:
41
+ self.logger.error(f'AmqpStorm确认消费失败 {type(e)} {e}')
41
42
 
42
43
  def _requeue(self, kw):
43
44
  # amqpstorm.Message.delivery_tag
@@ -206,7 +206,7 @@ class Booster:
206
206
  fabric_deploy(self, **params)
207
207
 
208
208
 
209
- boost = Booster
209
+ boost = Booster # @boost 后消费函数. 不能自动补全方法就用 Booster就可以。 2024版本的 pycharm抽风了,@boost的消费函数不能自动补全提示 .consume .push 这些方法。
210
210
  task_deco = boost # 两个装饰器名字都可以。task_deco是原来名字,兼容一下。
211
211
 
212
212
 
@@ -8,6 +8,9 @@ import importlib
8
8
  import pickle
9
9
 
10
10
  import time
11
+ from apscheduler.executors.pool import BasePoolExecutor
12
+
13
+ from funboost.utils.decorators import RedisDistributedLockContextManager,RedisDistributedBlockLockContextManager
11
14
  from typing import Union
12
15
  import threading
13
16
 
@@ -15,7 +18,7 @@ from apscheduler.schedulers.background import BackgroundScheduler
15
18
  from apscheduler.jobstores.redis import RedisJobStore
16
19
  # noinspection PyProtectedMember
17
20
  from apscheduler.schedulers.base import STATE_STOPPED, STATE_RUNNING
18
- from apscheduler.util import undefined
21
+ from apscheduler.util import undefined,TIMEOUT_MAX
19
22
  import deprecated
20
23
  from funboost.utils.redis_manager import RedisMixin
21
24
 
@@ -25,7 +28,8 @@ from funboost.consumers.base_consumer import AbstractConsumer
25
28
  from funboost.core.booster import BoostersManager, Booster
26
29
  from funboost.publishers.base_publisher import AbstractPublisher
27
30
  from funboost import BoosterParams
28
-
31
+ from funboost.concurrent_pool.flexible_thread_pool import FlexibleThreadPool
32
+ from funboost.concurrent_pool.custom_threadpool_executor import ThreadPoolExecutorShrinkAble
29
33
 
30
34
  @deprecated.deprecated(reason='以后不要再使用这种方式,对于job_store为数据库时候需要序列化不好。使用内存和数据库都兼容的添加任务方式: add_push_job')
31
35
  def timing_publish_deco(consuming_func_decorated_or_consumer: Union[callable, AbstractConsumer]):
@@ -53,6 +57,20 @@ def push_fun_params_to_broker(queue_name: str, *args, runonce_uuid=None, **kwarg
53
57
  else:
54
58
  BoostersManager.get_or_create_booster_by_queue_name(queue_name).push(*args, **kwargs)
55
59
 
60
+ class ThreadPoolExecutorForAps(BasePoolExecutor):
61
+ """
62
+ An executor that runs jobs in a concurrent.futures thread pool.
63
+
64
+ Plugin alias: ``threadpool``
65
+
66
+ :param max_workers: the maximum number of spawned threads.
67
+ :param pool_kwargs: dict of keyword arguments to pass to the underlying
68
+ ThreadPoolExecutor constructor
69
+ """
70
+
71
+ def __init__(self, max_workers=10, ):
72
+ pool = ThreadPoolExecutorShrinkAble(int(max_workers),)
73
+ super().__init__(pool)
56
74
 
57
75
  class FunboostBackgroundScheduler(BackgroundScheduler):
58
76
  """
@@ -60,6 +78,9 @@ class FunboostBackgroundScheduler(BackgroundScheduler):
60
78
  通过重写 _main_loop ,使得动态修改增加删除定时任务配置更好。
61
79
  """
62
80
 
81
+ _last_wait_seconds = None
82
+ _last_has_task = False
83
+
63
84
  @deprecated.deprecated(reason='以后不要再使用这种方式,对于job_store为数据库时候需要序列化不好。使用内存和数据库都兼容的添加任务方式: add_push_job')
64
85
  def add_timing_publish_job(self, func, trigger=None, args=None, kwargs=None, id=None, name=None,
65
86
  misfire_grace_time=undefined, coalesce=undefined, max_instances=undefined,
@@ -146,14 +167,22 @@ class FunboostBackgroundScheduler(BackgroundScheduler):
146
167
  或者下一个需要运行的任务的wait_seconds是3600秒后,此时新加了一个动态任务需要3600秒后,
147
168
  现在最多只需要1秒就能扫描到动态新增的定时任务了。
148
169
  """
149
- MAX_WAIT_SECONDS_FOR_NEX_PROCESS_JOBS = 1
170
+ MAX_WAIT_SECONDS_FOR_NEX_PROCESS_JOBS = 0.5
150
171
  wait_seconds = None
151
172
  while self.state == STATE_RUNNING:
152
173
  if wait_seconds is None:
153
174
  wait_seconds = MAX_WAIT_SECONDS_FOR_NEX_PROCESS_JOBS
154
- time.sleep(min(wait_seconds, MAX_WAIT_SECONDS_FOR_NEX_PROCESS_JOBS)) # 这个要取最小值,不然例如定时间隔0.1秒运行,不取最小值,不会每隔0.1秒运行。
175
+ self._last_wait_seconds = min(wait_seconds, MAX_WAIT_SECONDS_FOR_NEX_PROCESS_JOBS)
176
+ if wait_seconds in (None,TIMEOUT_MAX):
177
+ self._last_has_task = False
178
+ else:
179
+ self._last_has_task = True
180
+ time.sleep(self._last_wait_seconds) # 这个要取最小值,不然例如定时间隔0.1秒运行,不取最小值,不会每隔0.1秒运行。
155
181
  wait_seconds = self._process_jobs()
156
182
 
183
+ def _create_default_executor(self):
184
+ return ThreadPoolExecutorForAps() # 必须是apscheduler pool的子类
185
+
157
186
 
158
187
  FsdfBackgroundScheduler = FunboostBackgroundScheduler # 兼容一下名字,fsdf是 function-scheduling-distributed-framework 老框架名字的缩写
159
188
  # funboost_aps_scheduler定时配置基于内存的,不可以跨机器远程动态添加/修改/删除定时任务配置。如果需要动态增删改查定时任务,可以使用funboost_background_scheduler_redis_store
@@ -6,4 +6,5 @@ from funboost.timing_job import FsdfBackgroundScheduler
6
6
 
7
7
  """
8
8
  这个是使用mysql作为定时任务持久化,支持动态修改 添加定时任务,用户完全可以自己按照 funboost/timing_job/apscheduler_use_redis_store.py 中的代码实现,因为apscheduler支持SQLAlchemyJobStore
9
+ 只是scheduler改个jobstores类型,和funboost知识毫无关系,是apscheduler的知识。
9
10
  """
@@ -0,0 +1,61 @@
1
+ from apscheduler.jobstores.redis import RedisJobStore
2
+ from funboost.utils.redis_manager import RedisMixin
3
+
4
+ from funboost.timing_job import FunboostBackgroundScheduler
5
+ from funboost.funboost_config_deafult import BrokerConnConfig, FunboostCommonConfig
6
+ from funboost.utils.decorators import RedisDistributedBlockLockContextManager
7
+
8
+ """
9
+ 这个是使用redis作为定时任务持久化,支持跨机器好跨进程,外部远程 动态修改/添加/删除定时任务
10
+ """
11
+
12
+
13
+ class FunboostBackgroundSchedulerProcessJobsWithinRedisLock(FunboostBackgroundScheduler):
14
+ """
15
+ 分布式或多进程都启动某个apscheduler实例,如果都使用的同一个数据库类型的jobstores ,_process_jobs有很大概率会造成报错, 因为_process_jobs使用的是线程锁,管不了其他进程和分布式机器。
16
+
17
+ https://groups.google.com/g/apscheduler/c/Gjc_JQMPePc 问题也提到了这个bug
18
+
19
+ 继承 Custom schedulers https://apscheduler.readthedocs.io/en/3.x/extending.html 可以重写 _create_lock
20
+ """
21
+
22
+ process_jobs_redis_lock_key = f'funboost.BackgroundSchedulerProcessJobsWithinRedisLock'
23
+
24
+ def set_process_jobs_redis_lock_key(self, lock_key):
25
+ self.process_jobs_redis_lock_key = lock_key
26
+
27
+ # def _create_lock(self):
28
+ # return RedisDistributedBlockLockContextManager(RedisMixin().redis_db_frame,self.process_jobs_redis_lock_key,) 这个类的写法不适合固定的单例,
29
+ # RedisDistributedBlockLockContextManager的写法不适合 永远用一个 对象,所以还是放到 def _process_jobs 里面运行
30
+
31
+ # def _process_jobs(self):
32
+ # for i in range(10) :
33
+ # with RedisDistributedLockContextManager(RedisMixin().redis_db_frame, self.process_jobs_redis_lock_key, ) as lock:
34
+ # if lock.has_aquire_lock:
35
+ # wait_seconds = super()._process_jobs()
36
+ # return wait_seconds
37
+ # else:
38
+ # time.sleep(0.1)
39
+ # return 0.1
40
+
41
+ def _process_jobs(self):
42
+ with RedisDistributedBlockLockContextManager(RedisMixin().redis_db_frame, self.process_jobs_redis_lock_key, ):
43
+ return super()._process_jobs()
44
+
45
+
46
+ jobstores = {
47
+ "default": RedisJobStore(db=BrokerConnConfig.REDIS_DB, host=BrokerConnConfig.REDIS_HOST,
48
+ port=BrokerConnConfig.REDIS_PORT, password=BrokerConnConfig.REDIS_PASSWORD,
49
+ username=BrokerConnConfig.REDIS_USERNAME, jobs_key='funboost.apscheduler.jobs')
50
+ }
51
+
52
+ funboost_background_scheduler_redis_store = FunboostBackgroundSchedulerProcessJobsWithinRedisLock(timezone=FunboostCommonConfig.TIMEZONE, daemon=False, jobstores=jobstores)
53
+
54
+ """
55
+
56
+ 跨python解释器 跨机器动态修改定时任务配置的例子在
57
+
58
+ test_frame/test_apschedual/test_aps_redis_store.py
59
+ test_frame/test_apschedual/test_change_aps_conf.py
60
+
61
+ """
@@ -361,6 +361,30 @@ class RedisDistributedLockContextManager(LoggerMixin, LoggerLevelSetterMixin):
361
361
  return False
362
362
 
363
363
 
364
+ class RedisDistributedBlockLockContextManager(RedisDistributedLockContextManager):
365
+ def __init__(self, redis_client, redis_lock_key, expire_seconds=30, check_interval=0.1):
366
+ super().__init__(redis_client,redis_lock_key,expire_seconds)
367
+ self.check_interval = check_interval
368
+ # self.logger.setLevel(logging.DEBUG)
369
+
370
+ def __enter__(self):
371
+ while True:
372
+ self._line = sys._getframe().f_back.f_lineno # 调用此方法的代码的函数
373
+ self._file_name = sys._getframe(1).f_code.co_filename # 哪个文件调了用此方法
374
+ ret = self.redis_client.set(self.redis_lock_key, value=self.identifier, ex=self._expire_seconds, nx=True)
375
+ has_aquire_lock = False if ret is None else True
376
+ if has_aquire_lock:
377
+ log_msg = f'\n"{self._file_name}:{self._line}" 这行代码获得了redis锁 {self.redis_lock_key}'
378
+ else:
379
+ log_msg = f'\n"{self._file_name}:{self._line}" 这行代码此次没有获得redis锁 {self.redis_lock_key}'
380
+ # print(self.logger.level,log_msg)
381
+ self.logger.debug(log_msg)
382
+ if has_aquire_lock:
383
+ break
384
+ else:
385
+ time.sleep(self.check_interval)
386
+
387
+
364
388
  """
365
389
  @contextmanager
366
390
  def some_generator(<arguments>):
@@ -372,6 +396,9 @@ class RedisDistributedLockContextManager(LoggerMixin, LoggerLevelSetterMixin):
372
396
  """
373
397
 
374
398
 
399
+
400
+
401
+
375
402
  class ExceptionContextManager:
376
403
  """
377
404
  用上下文管理器捕获异常,可对代码片段进行错误捕捉,比装饰器更细腻
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 46.6
3
+ Version: 46.8
4
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
@@ -1,30 +0,0 @@
1
- from apscheduler.jobstores.redis import RedisJobStore
2
-
3
- from funboost.funboost_config_deafult import BrokerConnConfig,FunboostCommonConfig
4
-
5
- from funboost.timing_job import FunboostBackgroundScheduler
6
-
7
- """
8
- 这个是使用redis作为定时任务持久化,支持动态修改/添加/删除定时任务
9
- """
10
-
11
- jobstores = {
12
- "default": RedisJobStore(db=BrokerConnConfig.REDIS_DB, host=BrokerConnConfig.REDIS_HOST,
13
- port=BrokerConnConfig.REDIS_PORT, password=BrokerConnConfig.REDIS_PASSWORD,
14
- username=BrokerConnConfig.REDIS_USERNAME,jobs_key='funboost.apscheduler.jobs')
15
- }
16
-
17
- funboost_background_scheduler_redis_store = FunboostBackgroundScheduler(timezone=FunboostCommonConfig.TIMEZONE, daemon=False, jobstores=jobstores)
18
-
19
-
20
-
21
-
22
-
23
- """
24
-
25
- 跨python解释器 跨机器动态修改定时任务配置的例子在
26
-
27
- test_frame/test_apschedual/test_aps_redis_store.py
28
- test_frame/test_apschedual/test_change_aps_conf.py
29
-
30
- """
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes