funboost 46.8__tar.gz → 47.0__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-46.8/funboost.egg-info → funboost-47.0}/PKG-INFO +1 -1
  2. {funboost-46.8 → funboost-47.0}/funboost/__init__.py +1 -1
  3. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/custom_threadpool_executor.py +5 -0
  4. {funboost-46.8 → funboost-47.0}/funboost/consumers/base_consumer.py +11 -8
  5. {funboost-46.8 → funboost-47.0}/funboost/core/funboost_time.py +1 -0
  6. {funboost-46.8 → funboost-47.0}/funboost/core/func_params_model.py +16 -5
  7. {funboost-46.8 → funboost-47.0}/funboost/publishers/base_publisher.py +8 -9
  8. {funboost-46.8 → funboost-47.0}/funboost/timing_job/__init__.py +12 -15
  9. {funboost-46.8 → funboost-47.0}/funboost/utils/time_util.py +17 -16
  10. {funboost-46.8 → funboost-47.0/funboost.egg-info}/PKG-INFO +1 -1
  11. {funboost-46.8 → funboost-47.0}/funboost.egg-info/requires.txt +2 -2
  12. {funboost-46.8 → funboost-47.0}/setup.py +2 -2
  13. {funboost-46.8 → funboost-47.0}/LICENSE +0 -0
  14. {funboost-46.8 → funboost-47.0}/MANIFEST.in +0 -0
  15. {funboost-46.8 → funboost-47.0}/README.md +0 -0
  16. {funboost-46.8 → funboost-47.0}/funboost/__init__old.py +0 -0
  17. {funboost-46.8 → funboost-47.0}/funboost/__main__.py +0 -0
  18. {funboost-46.8 → funboost-47.0}/funboost/assist/__init__.py +0 -0
  19. {funboost-46.8 → funboost-47.0}/funboost/assist/celery_helper.py +0 -0
  20. {funboost-46.8 → funboost-47.0}/funboost/assist/dramatiq_helper.py +0 -0
  21. {funboost-46.8 → funboost-47.0}/funboost/assist/faststream_helper.py +0 -0
  22. {funboost-46.8 → funboost-47.0}/funboost/assist/huey_helper.py +0 -0
  23. {funboost-46.8 → funboost-47.0}/funboost/assist/rocketry_helper.py +0 -0
  24. {funboost-46.8 → funboost-47.0}/funboost/assist/rq_helper.py +0 -0
  25. {funboost-46.8 → funboost-47.0}/funboost/assist/rq_windows_worker.py +0 -0
  26. {funboost-46.8 → funboost-47.0}/funboost/assist/taskiq_helper.py +0 -0
  27. {funboost-46.8 → funboost-47.0}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
  28. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/__init__.py +0 -0
  29. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/async_helper.py +0 -0
  30. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/async_pool_executor.py +0 -0
  31. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/backup/__init__.py +0 -0
  32. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
  33. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
  34. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
  35. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/base_pool_type.py +0 -0
  36. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
  37. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
  38. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
  39. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
  40. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
  41. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
  42. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
  43. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
  44. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
  45. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/pool_commons.py +0 -0
  46. {funboost-46.8 → funboost-47.0}/funboost/concurrent_pool/single_thread_executor.py +0 -0
  47. {funboost-46.8 → funboost-47.0}/funboost/constant.py +0 -0
  48. {funboost-46.8 → funboost-47.0}/funboost/consumers/__init__.py +0 -0
  49. {funboost-46.8 → funboost-47.0}/funboost/consumers/celery_consumer.py +0 -0
  50. {funboost-46.8 → funboost-47.0}/funboost/consumers/confirm_mixin.py +0 -0
  51. {funboost-46.8 → funboost-47.0}/funboost/consumers/dramatiq_consumer.py +0 -0
  52. {funboost-46.8 → funboost-47.0}/funboost/consumers/empty_consumer.py +0 -0
  53. {funboost-46.8 → funboost-47.0}/funboost/consumers/faststream_consumer.py +0 -0
  54. {funboost-46.8 → funboost-47.0}/funboost/consumers/http_consumer.py +0 -0
  55. {funboost-46.8 → funboost-47.0}/funboost/consumers/http_consumer000.py +0 -0
  56. {funboost-46.8 → funboost-47.0}/funboost/consumers/httpsqs_consumer.py +0 -0
  57. {funboost-46.8 → funboost-47.0}/funboost/consumers/huey_consumer.py +0 -0
  58. {funboost-46.8 → funboost-47.0}/funboost/consumers/kafka_consumer.py +0 -0
  59. {funboost-46.8 → funboost-47.0}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
  60. {funboost-46.8 → funboost-47.0}/funboost/consumers/kombu_consumer.py +0 -0
  61. {funboost-46.8 → funboost-47.0}/funboost/consumers/local_python_queue_consumer.py +0 -0
  62. {funboost-46.8 → funboost-47.0}/funboost/consumers/memory_deque_consumer.py +0 -0
  63. {funboost-46.8 → funboost-47.0}/funboost/consumers/mongomq_consumer.py +0 -0
  64. {funboost-46.8 → funboost-47.0}/funboost/consumers/mqtt_consumer.py +0 -0
  65. {funboost-46.8 → funboost-47.0}/funboost/consumers/nameko_consumer.py +0 -0
  66. {funboost-46.8 → funboost-47.0}/funboost/consumers/nats_consumer.py +0 -0
  67. {funboost-46.8 → funboost-47.0}/funboost/consumers/nsq_consumer.py +0 -0
  68. {funboost-46.8 → funboost-47.0}/funboost/consumers/peewee_conusmer.py +0 -0
  69. {funboost-46.8 → funboost-47.0}/funboost/consumers/persist_queue_consumer.py +0 -0
  70. {funboost-46.8 → funboost-47.0}/funboost/consumers/pulsar_consumer.py +0 -0
  71. {funboost-46.8 → funboost-47.0}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -0
  72. {funboost-46.8 → funboost-47.0}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
  73. {funboost-46.8 → funboost-47.0}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
  74. {funboost-46.8 → funboost-47.0}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
  75. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
  76. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_consumer.py +0 -0
  77. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_consumer_ack_able.py +0 -0
  78. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_consumer_ack_using_timeout.py +0 -0
  79. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_consumer_priority.py +0 -0
  80. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_consumer_simple.py +0 -0
  81. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_filter.py +0 -0
  82. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_pubsub_consumer.py +0 -0
  83. {funboost-46.8 → funboost-47.0}/funboost/consumers/redis_stream_consumer.py +0 -0
  84. {funboost-46.8 → funboost-47.0}/funboost/consumers/rocketmq_consumer.py +0 -0
  85. {funboost-46.8 → funboost-47.0}/funboost/consumers/rq_consumer.py +0 -0
  86. {funboost-46.8 → funboost-47.0}/funboost/consumers/sqlachemy_consumer.py +0 -0
  87. {funboost-46.8 → funboost-47.0}/funboost/consumers/tcp_consumer.py +0 -0
  88. {funboost-46.8 → funboost-47.0}/funboost/consumers/txt_file_consumer.py +0 -0
  89. {funboost-46.8 → funboost-47.0}/funboost/consumers/udp_consumer.py +0 -0
  90. {funboost-46.8 → funboost-47.0}/funboost/consumers/zeromq_consumer.py +0 -0
  91. {funboost-46.8 → funboost-47.0}/funboost/contrib/__init__.py +0 -0
  92. {funboost-46.8 → funboost-47.0}/funboost/contrib/api_publish_msg.py +0 -0
  93. {funboost-46.8 → funboost-47.0}/funboost/contrib/django_db_deco.py +0 -0
  94. {funboost-46.8 → funboost-47.0}/funboost/contrib/queue2queue.py +0 -0
  95. {funboost-46.8 → funboost-47.0}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
  96. {funboost-46.8 → funboost-47.0}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
  97. {funboost-46.8 → funboost-47.0}/funboost/core/__init__.py +0 -0
  98. {funboost-46.8 → funboost-47.0}/funboost/core/active_cousumer_info_getter.py +0 -0
  99. {funboost-46.8 → funboost-47.0}/funboost/core/booster.py +0 -0
  100. {funboost-46.8 → funboost-47.0}/funboost/core/cli/__init__.py +0 -0
  101. {funboost-46.8 → funboost-47.0}/funboost/core/cli/discovery_boosters.py +0 -0
  102. {funboost-46.8 → funboost-47.0}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
  103. {funboost-46.8 → funboost-47.0}/funboost/core/cli/funboost_fire.py +0 -0
  104. {funboost-46.8 → funboost-47.0}/funboost/core/current_task.py +0 -0
  105. {funboost-46.8 → funboost-47.0}/funboost/core/exceptions.py +0 -0
  106. {funboost-46.8 → funboost-47.0}/funboost/core/fabric_deploy_helper.py +0 -0
  107. {funboost-46.8 → funboost-47.0}/funboost/core/funboost_config_getter.py +0 -0
  108. {funboost-46.8 → funboost-47.0}/funboost/core/function_result_status_config.py +0 -0
  109. {funboost-46.8 → funboost-47.0}/funboost/core/function_result_status_saver.py +0 -0
  110. {funboost-46.8 → funboost-47.0}/funboost/core/helper_funs.py +0 -0
  111. {funboost-46.8 → funboost-47.0}/funboost/core/kill_remote_task.py +0 -0
  112. {funboost-46.8 → funboost-47.0}/funboost/core/lazy_impoter.py +0 -0
  113. {funboost-46.8 → funboost-47.0}/funboost/core/loggers.py +0 -0
  114. {funboost-46.8 → funboost-47.0}/funboost/core/msg_result_getter.py +0 -0
  115. {funboost-46.8 → funboost-47.0}/funboost/core/muliti_process_enhance.py +0 -0
  116. {funboost-46.8 → funboost-47.0}/funboost/core/serialization.py +0 -0
  117. {funboost-46.8 → funboost-47.0}/funboost/core/task_id_logger.py +0 -0
  118. {funboost-46.8 → funboost-47.0}/funboost/factories/__init__.py +0 -0
  119. {funboost-46.8 → funboost-47.0}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
  120. {funboost-46.8 → funboost-47.0}/funboost/factories/consumer_factory.py +0 -0
  121. {funboost-46.8 → funboost-47.0}/funboost/factories/publisher_factotry.py +0 -0
  122. {funboost-46.8 → funboost-47.0}/funboost/funboost_config_deafult.py +0 -0
  123. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
  124. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
  125. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/app.py +0 -0
  126. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/functions.py +0 -0
  127. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/assets/css/custom.css +0 -0
  128. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
  129. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
  130. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/assets/js/custom.js +0 -0
  131. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
  132. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/css/style.css +0 -0
  133. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/images/bg.jpg +0 -0
  134. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/images/password.png +0 -0
  135. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/images/tick.png +0 -0
  136. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/images/user.png +0 -0
  137. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
  138. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/templates/index.html +0 -0
  139. {funboost-46.8 → funboost-47.0}/funboost/function_result_web/templates/login.html +0 -0
  140. {funboost-46.8 → funboost-47.0}/funboost/publishers/__init__.py +0 -0
  141. {funboost-46.8 → funboost-47.0}/funboost/publishers/celery_publisher.py +0 -0
  142. {funboost-46.8 → funboost-47.0}/funboost/publishers/celery_publisher000.py +0 -0
  143. {funboost-46.8 → funboost-47.0}/funboost/publishers/confluent_kafka_publisher.py +0 -0
  144. {funboost-46.8 → funboost-47.0}/funboost/publishers/dramatiq_publisher.py +0 -0
  145. {funboost-46.8 → funboost-47.0}/funboost/publishers/empty_publisher.py +0 -0
  146. {funboost-46.8 → funboost-47.0}/funboost/publishers/faststream_publisher.py +0 -0
  147. {funboost-46.8 → funboost-47.0}/funboost/publishers/http_publisher.py +0 -0
  148. {funboost-46.8 → funboost-47.0}/funboost/publishers/httpsqs_publisher.py +0 -0
  149. {funboost-46.8 → funboost-47.0}/funboost/publishers/huey_publisher.py +0 -0
  150. {funboost-46.8 → funboost-47.0}/funboost/publishers/kafka_publisher.py +0 -0
  151. {funboost-46.8 → funboost-47.0}/funboost/publishers/kombu_publisher.py +0 -0
  152. {funboost-46.8 → funboost-47.0}/funboost/publishers/local_python_queue_publisher.py +0 -0
  153. {funboost-46.8 → funboost-47.0}/funboost/publishers/meomory_deque_publisher.py +0 -0
  154. {funboost-46.8 → funboost-47.0}/funboost/publishers/mongomq_publisher.py +0 -0
  155. {funboost-46.8 → funboost-47.0}/funboost/publishers/mqtt_publisher.py +0 -0
  156. {funboost-46.8 → funboost-47.0}/funboost/publishers/nameko_publisher.py +0 -0
  157. {funboost-46.8 → funboost-47.0}/funboost/publishers/nats_publisher.py +0 -0
  158. {funboost-46.8 → funboost-47.0}/funboost/publishers/nsq_publisher.py +0 -0
  159. {funboost-46.8 → funboost-47.0}/funboost/publishers/peewee_publisher.py +0 -0
  160. {funboost-46.8 → funboost-47.0}/funboost/publishers/persist_queue_publisher.py +0 -0
  161. {funboost-46.8 → funboost-47.0}/funboost/publishers/pulsar_publisher.py +0 -0
  162. {funboost-46.8 → funboost-47.0}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
  163. {funboost-46.8 → funboost-47.0}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
  164. {funboost-46.8 → funboost-47.0}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
  165. {funboost-46.8 → funboost-47.0}/funboost/publishers/redis_publisher.py +0 -0
  166. {funboost-46.8 → funboost-47.0}/funboost/publishers/redis_publisher_lpush.py +0 -0
  167. {funboost-46.8 → funboost-47.0}/funboost/publishers/redis_publisher_priority.py +0 -0
  168. {funboost-46.8 → funboost-47.0}/funboost/publishers/redis_publisher_simple.py +0 -0
  169. {funboost-46.8 → funboost-47.0}/funboost/publishers/redis_pubsub_publisher.py +0 -0
  170. {funboost-46.8 → funboost-47.0}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
  171. {funboost-46.8 → funboost-47.0}/funboost/publishers/redis_stream_publisher.py +0 -0
  172. {funboost-46.8 → funboost-47.0}/funboost/publishers/rocketmq_publisher.py +0 -0
  173. {funboost-46.8 → funboost-47.0}/funboost/publishers/rq_publisher.py +0 -0
  174. {funboost-46.8 → funboost-47.0}/funboost/publishers/sqla_queue_publisher.py +0 -0
  175. {funboost-46.8 → funboost-47.0}/funboost/publishers/tcp_publisher.py +0 -0
  176. {funboost-46.8 → funboost-47.0}/funboost/publishers/txt_file_publisher.py +0 -0
  177. {funboost-46.8 → funboost-47.0}/funboost/publishers/udp_publisher.py +0 -0
  178. {funboost-46.8 → funboost-47.0}/funboost/publishers/zeromq_publisher.py +0 -0
  179. {funboost-46.8 → funboost-47.0}/funboost/queues/__init__.py +0 -0
  180. {funboost-46.8 → funboost-47.0}/funboost/queues/memory_queues_map.py +0 -0
  181. {funboost-46.8 → funboost-47.0}/funboost/queues/peewee_queue.py +0 -0
  182. {funboost-46.8 → funboost-47.0}/funboost/queues/sqla_queue.py +0 -0
  183. {funboost-46.8 → funboost-47.0}/funboost/set_frame_config.py +0 -0
  184. {funboost-46.8 → funboost-47.0}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
  185. {funboost-46.8 → funboost-47.0}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
  186. {funboost-46.8 → funboost-47.0}/funboost/utils/__init__.py +0 -0
  187. {funboost-46.8 → funboost-47.0}/funboost/utils/apscheduler_monkey.py +0 -0
  188. {funboost-46.8 → funboost-47.0}/funboost/utils/block_exit.py +0 -0
  189. {funboost-46.8 → funboost-47.0}/funboost/utils/bulk_operation.py +0 -0
  190. {funboost-46.8 → funboost-47.0}/funboost/utils/class_utils.py +0 -0
  191. {funboost-46.8 → funboost-47.0}/funboost/utils/ctrl_c_end.py +0 -0
  192. {funboost-46.8 → funboost-47.0}/funboost/utils/custom_pysnooper.py +0 -0
  193. {funboost-46.8 → funboost-47.0}/funboost/utils/decorators.py +0 -0
  194. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages/__init__.py +0 -0
  195. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
  196. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
  197. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
  198. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
  199. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
  200. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
  201. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
  202. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
  203. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
  204. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
  205. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
  206. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
  207. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
  208. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
  209. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
  210. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
  211. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
  212. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
  213. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
  214. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
  215. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
  216. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
  217. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
  218. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
  219. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
  220. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
  221. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
  222. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
  223. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
  224. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
  225. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
  226. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
  227. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
  228. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
  229. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
  230. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
  231. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
  232. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
  233. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
  234. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
  235. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
  236. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
  237. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
  238. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -0
  239. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
  240. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
  241. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
  242. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
  243. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
  244. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
  245. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
  246. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
  247. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
  248. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
  249. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
  250. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
  251. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
  252. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
  253. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
  254. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
  255. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
  256. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
  257. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
  258. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
  259. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc2222.py +0 -0
  260. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
  261. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
  262. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
  263. {funboost-46.8 → funboost-47.0}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -0
  264. {funboost-46.8 → funboost-47.0}/funboost/utils/develop_log.py +0 -0
  265. {funboost-46.8 → funboost-47.0}/funboost/utils/expire_lock.py +0 -0
  266. {funboost-46.8 → funboost-47.0}/funboost/utils/json_helper.py +0 -0
  267. {funboost-46.8 → funboost-47.0}/funboost/utils/mongo_util.py +0 -0
  268. {funboost-46.8 → funboost-47.0}/funboost/utils/monkey_color_log.py +0 -0
  269. {funboost-46.8 → funboost-47.0}/funboost/utils/monkey_patches.py +0 -0
  270. {funboost-46.8 → funboost-47.0}/funboost/utils/mqtt_util.py +0 -0
  271. {funboost-46.8 → funboost-47.0}/funboost/utils/paramiko_util.py +0 -0
  272. {funboost-46.8 → funboost-47.0}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
  273. {funboost-46.8 → funboost-47.0}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
  274. {funboost-46.8 → funboost-47.0}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
  275. {funboost-46.8 → funboost-47.0}/funboost/utils/pysnooper_ydf/utils.py +0 -0
  276. {funboost-46.8 → funboost-47.0}/funboost/utils/pysnooper_ydf/variables.py +0 -0
  277. {funboost-46.8 → funboost-47.0}/funboost/utils/rabbitmq_factory.py +0 -0
  278. {funboost-46.8 → funboost-47.0}/funboost/utils/redis_manager.py +0 -0
  279. {funboost-46.8 → funboost-47.0}/funboost/utils/redis_manager_old.py +0 -0
  280. {funboost-46.8 → funboost-47.0}/funboost/utils/resource_monitoring.py +0 -0
  281. {funboost-46.8 → funboost-47.0}/funboost/utils/restart_python.py +0 -0
  282. {funboost-46.8 → funboost-47.0}/funboost/utils/simple_data_class.py +0 -0
  283. {funboost-46.8 → funboost-47.0}/funboost/utils/str_utils.py +0 -0
  284. {funboost-46.8 → funboost-47.0}/funboost/utils/times/__init__.py +0 -0
  285. {funboost-46.8 → funboost-47.0}/funboost/utils/times/version.py +0 -0
  286. {funboost-46.8 → funboost-47.0}/funboost/utils/un_strict_json_dumps.py +0 -0
  287. {funboost-46.8 → funboost-47.0}/funboost.egg-info/SOURCES.txt +0 -0
  288. {funboost-46.8 → funboost-47.0}/funboost.egg-info/dependency_links.txt +0 -0
  289. {funboost-46.8 → funboost-47.0}/funboost.egg-info/entry_points.txt +0 -0
  290. {funboost-46.8 → funboost-47.0}/funboost.egg-info/top_level.txt +0 -0
  291. {funboost-46.8 → funboost-47.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 46.8
3
+ Version: 47.0
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.8"
16
+ __version__ = "47.0"
17
17
 
18
18
  from funboost.set_frame_config import show_frame_config
19
19
 
@@ -19,6 +19,8 @@
19
19
 
20
20
  可以在各种地方加入 time.sleep 来验证 第1条和第2条的自动智能缩放功能。
21
21
  """
22
+ import logging
23
+
22
24
  import os
23
25
  import atexit
24
26
  import queue
@@ -175,6 +177,9 @@ class _CustomThread(threading.Thread, FunboostFileLoggerMixin, LoggerLevelSetter
175
177
  # noinspection PyProtectedMember
176
178
  def run(self):
177
179
  # noinspection PyUnresolvedReferences
180
+ # print(logging.getLogger(None).level,logging.getLogger(None).handlers)
181
+ # print(self.logger.level)
182
+ # print(self.logger.handlers)
178
183
  self.logger.debug(f'新启动线程 {self._ident} ')
179
184
  self._executorx._change_threads_free_count(1)
180
185
  while True:
@@ -13,6 +13,7 @@ import typing
13
13
  import abc
14
14
  import copy
15
15
  from apscheduler.jobstores.memory import MemoryJobStore
16
+ from funboost.core.funboost_time import FunboostTime
16
17
  from pathlib import Path
17
18
  # from multiprocessing import Process
18
19
  import datetime
@@ -401,11 +402,12 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
401
402
  logger_apscheduler = get_logger('push_for_apscheduler_use_database_store', log_filename='push_for_apscheduler_use_database_store.log')
402
403
 
403
404
  @classmethod
404
- def _push_for_apscheduler_use_database_store(cls, queue_name, msg, runonce_uuid):
405
- key = 'apscheduler.redisjobstore_runonce'
406
- if RedisMixin().redis_db_frame.sadd(key, runonce_uuid): # 这样可以阻止多次启动同队列名消费者 redis jobstore多次运行函数.
407
- cls.logger_apscheduler.debug(f'延时任务用普通消息重新发布到普通队列 {msg}')
408
- funboost_lazy_impoter.BoostersManager.get_or_create_booster_by_queue_name(queue_name).publish(msg)
405
+ def _push_apscheduler_task_to_broker(cls, queue_name, msg, runonce_uuid):
406
+ funboost_lazy_impoter.BoostersManager.get_or_create_booster_by_queue_name(queue_name).publish(msg)
407
+ # key = 'apscheduler.redisjobstore_runonce'
408
+ # if RedisMixin().redis_db_frame.sadd(key, runonce_uuid): # 这样可以阻止多次启动同队列名消费者 redis jobstore多次运行函数.
409
+ # cls.logger_apscheduler.debug(f'延时任务用普通消息重新发布到普通队列 {msg}')
410
+ # funboost_lazy_impoter.BoostersManager.get_or_create_booster_by_queue_name(queue_name).publish(msg)
409
411
 
410
412
  @abc.abstractmethod
411
413
  def _shedual_task(self):
@@ -486,9 +488,10 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
486
488
  run_date = None
487
489
  # print(kw)
488
490
  if msg_countdown:
489
- run_date = time_util.DatetimeConverter(kw['body']['extra']['publish_time']).datetime_obj + datetime.timedelta(seconds=msg_countdown)
491
+ run_date = FunboostTime(kw['body']['extra']['publish_time']).datetime_obj + datetime.timedelta(seconds=msg_countdown)
490
492
  if msg_eta:
491
- run_date = time_util.DatetimeConverter(msg_eta).datetime_obj
493
+
494
+ run_date = FunboostTime(msg_eta).datetime_obj
492
495
  # print(run_date,time_util.DatetimeConverter().datetime_obj)
493
496
  # print(run_date.timestamp(),time_util.DatetimeConverter().datetime_obj.timestamp())
494
497
  # print(self.concurrent_pool)
@@ -507,7 +510,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
507
510
  self.__delete_eta_countdown(msg_no_delay)
508
511
  # print(msg_no_delay)
509
512
  # 数据库作为apscheduler的jobstores时候, 不能用 self.pbulisher_of_same_queue.publish,self不能序列化
510
- self._delay_task_scheduler.add_job(self._push_for_apscheduler_use_database_store, 'date', run_date=run_date,
513
+ self._delay_task_scheduler.add_job(self._push_apscheduler_task_to_broker, 'date', run_date=run_date,
511
514
  kwargs={'queue_name': self.queue_name, 'msg': msg_no_delay, 'runonce_uuid': str(uuid.uuid4())},
512
515
  misfire_grace_time=misfire_grace_time,
513
516
  )
@@ -10,6 +10,7 @@ from funboost.funboost_config_deafult import FunboostCommonConfig
10
10
 
11
11
  class FunboostTime(NbTime):
12
12
  default_formatter = NbTime.FORMATTER_DATETIME_NO_ZONE
13
+
13
14
  def get_time_zone_str(self,time_zone: typing.Union[str, datetime.tzinfo,None] = None):
14
15
  return time_zone or self.default_time_zone or FunboostCommonConfig.TIMEZONE or self.get_localzone_name()
15
16
 
@@ -1,9 +1,12 @@
1
+ from typing import Any
2
+
1
3
  import asyncio
2
4
  import datetime
3
5
  import functools
4
6
  import json
5
7
  import logging
6
8
  import typing
9
+ from pydantic.main import IncEx
7
10
  from typing_extensions import Literal
8
11
  from collections import OrderedDict
9
12
 
@@ -152,7 +155,7 @@ class BoosterParams(BaseJsonAbleModel):
152
155
  is_push_to_dlx_queue_when_retry_max_times: bool = False # 函数达到最大重试次数仍然没成功,是否发送到死信队列,死信队列的名字是 队列名字 + _dlx。
153
156
 
154
157
  consumin_function_decorator: typing.Callable = None # 函数的装饰器。因为此框架做参数自动转指点,需要获取精准的入参名称,不支持在消费函数上叠加 @ *args **kwargs的装饰器,如果想用装饰器可以这里指定。
155
- function_timeout: typing.Union[int, float] = 0 # 超时秒数,函数运行超过这个时间,则自动杀死函数。为0是不限制。 谨慎使用,非必要别去设置超时时间,设置后性能会降低(因为需要把用户函数包装到另一个线单独的程中去运行),而且突然强制超时杀死运行中函数,可能会造成死锁.(例如用户函数在获得线程锁后突然杀死函数,别的线程再也无法获得锁了)
158
+ function_timeout: typing.Union[int, float,None] = None # 超时秒数,函数运行超过这个时间,则自动杀死函数。为0是不限制。 谨慎使用,非必要别去设置超时时间,设置后性能会降低(因为需要把用户函数包装到另一个线单独的程中去运行),而且突然强制超时杀死运行中函数,可能会造成死锁.(例如用户函数在获得线程锁后突然杀死函数,别的线程再也无法获得锁了)
156
159
 
157
160
  log_level: int = logging.DEBUG # 消费者和发布者的日志级别,建议设置DEBUG级别,不然无法知道正在运行什么消息
158
161
  logger_prefix: str = '' # 日志名字前缀,可以设置前缀
@@ -194,7 +197,8 @@ class BoosterParams(BaseJsonAbleModel):
194
197
  broker_exclusive_config: dict = {} # 加上一个不同种类中间件非通用的配置,不同中间件自身独有的配置,不是所有中间件都兼容的配置,因为框架支持30种消息队列,消息队列不仅仅是一般的先进先出queue这么简单的概念,
195
198
  # 例如kafka支持消费者组,rabbitmq也支持各种独特概念例如各种ack机制 复杂路由机制,有的中间件原生能支持消息优先级有的中间件不支持,每一种消息队列都有独特的配置参数意义,可以通过这里传递。每种中间件能传递的键值对可以看consumer类的 BROKER_EXCLUSIVE_CONFIG_DEFAULT
196
199
 
197
- should_check_publish_func_params: bool = True # 消息发布时候是否校验消息发布内容,比如有的人发布消息,函数只接受a,b两个入参,他去传2个入参,或者传参不存在的参数名字, 如果消费函数你非要写*args,**kwargs,那就需要关掉发布消息时候的函数入参检查
200
+ should_check_publish_func_params: bool = True # 消息发布时候是否校验消息发布内容,比如有的人发布消息,函数只接受a,b两个入参,他去传2个入参,或者传参不存在的参数名字; 如果消费函数加了装饰器 ,你非要写*args,**kwargs,那就需要关掉发布消息时候的函数入参检查
201
+ publish_msg_log_use_full_msg: bool = False # 发布到消息队列的消息内容的日志,是否显示消息的完整体,还是只显示函数入参。
198
202
 
199
203
  consumer_override_cls: typing.Optional[typing.Type] = None # 使用 consumer_override_cls 和 publisher_override_cls 来自定义重写或新增消费者 发布者,见文档4.21b介绍,
200
204
  publisher_override_cls: typing.Optional[typing.Type] = None
@@ -272,7 +276,12 @@ class PriorityConsumingControlConfig(BaseJsonAbleModel):
272
276
  例如消费为add函数,可以每个独立的任务设置不同的超时时间,不同的重试次数,是否使用rpc模式。这里的配置优先,可以覆盖生成消费者时候的配置。
273
277
  """
274
278
 
275
- function_timeout: typing.Union[float, int] = 0
279
+ class Config:
280
+ json_encoders = {
281
+ datetime.datetime: lambda v: v.strftime("%Y-%m-%d %H:%M:%S")
282
+ }
283
+
284
+ function_timeout: typing.Union[float, int,None] = None
276
285
 
277
286
  max_retry_times: int = None
278
287
 
@@ -283,7 +292,7 @@ class PriorityConsumingControlConfig(BaseJsonAbleModel):
283
292
  is_using_rpc_mode: bool = None
284
293
 
285
294
  countdown: typing.Union[float, int] = None
286
- eta: datetime.datetime = None
295
+ eta: typing.Union[datetime.datetime, str] = None # 时间对象, 或 %Y-%m-%d %H:%M:%S 字符串。
287
296
  misfire_grace_time: typing.Union[int, None] = None
288
297
 
289
298
  other_extra_params: dict = None # 其他参数, 例如消息优先级 , priority_control_config=PriorityConsumingControlConfig(other_extra_params={'priroty': priorityxx}),
@@ -297,6 +306,8 @@ class PriorityConsumingControlConfig(BaseJsonAbleModel):
297
306
  return values
298
307
 
299
308
 
309
+
310
+
300
311
  class PublisherParams(BaseJsonAbleModel):
301
312
  queue_name: str
302
313
  log_level: int = logging.DEBUG
@@ -311,7 +322,7 @@ class PublisherParams(BaseJsonAbleModel):
311
322
  should_check_publish_func_params: bool = True # 消息发布时候是否校验消息发布内容,比如有的人发布消息,函数只接受a,b两个入参,他去传2个入参,或者传参不存在的参数名字, 如果消费函数你非要写*args,**kwargs,那就需要关掉发布消息时候的函数入参检查
312
323
  publisher_override_cls: typing.Optional[typing.Type] = None
313
324
  # func_params_is_pydantic_model: bool = False # funboost 兼容支持 函数娼还是 pydantic model类型,funboost在发布之前和取出来时候自己转化。
314
-
325
+ publish_msg_log_use_full_msg: bool = False # 发布到消息队列的消息内容的日志,是否显示消息的完整体,还是只显示函数入参。
315
326
  consuming_function_kind: typing.Optional[str] = None # 自动生成的信息,不需要用户主动传参.
316
327
 
317
328
 
@@ -17,15 +17,12 @@ import typing
17
17
  from functools import wraps
18
18
  from threading import Lock
19
19
 
20
-
21
20
  import nb_log
22
21
  from funboost.constant import ConstStrForClassMethod, FunctionKind
23
22
  from funboost.core.func_params_model import PublisherParams, PriorityConsumingControlConfig
24
23
  from funboost.core.helper_funs import MsgGenerater
25
24
  from funboost.core.loggers import develop_logger
26
25
 
27
-
28
-
29
26
  # from nb_log import LoggerLevelSetterMixin, LoggerMixin
30
27
  from funboost.core.loggers import LoggerLevelSetterMixin, FunboostFileLoggerMixin, get_logger
31
28
  from funboost.core.msg_result_getter import AsyncResult, AioAsyncResult
@@ -186,7 +183,7 @@ class AbstractPublisher(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
186
183
  return msg_dict['extra'].get('other_extra_params', {}).get(k, None)
187
184
 
188
185
  def _convert_msg(self, msg: typing.Union[str, dict], task_id=None,
189
- priority_control_config: PriorityConsumingControlConfig = None) -> (typing.Dict, typing.Dict, typing.Dict,str):
186
+ priority_control_config: PriorityConsumingControlConfig = None) -> (typing.Dict, typing.Dict, typing.Dict, str):
190
187
  msg = Serialization.to_dict(msg)
191
188
  msg_function_kw = copy.deepcopy(msg)
192
189
  raw_extra = {}
@@ -198,7 +195,7 @@ class AbstractPublisher(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
198
195
  task_id = task_id or MsgGenerater.generate_task_id(self._queue_name)
199
196
  extra_params = MsgGenerater.generate_pulish_time_and_task_id(self._queue_name, task_id=task_id)
200
197
  if priority_control_config:
201
- extra_params.update(priority_control_config.dict(exclude_none=True))
198
+ extra_params.update(Serialization.to_dict(priority_control_config.json(exclude_none=True))) # priority_control_config.json 是为了充分使用 pydantic的自定义时间格式化字符串
202
199
  extra_params.update(raw_extra)
203
200
  msg['extra'] = extra_params
204
201
  return msg, msg_function_kw, extra_params, task_id
@@ -215,10 +212,12 @@ class AbstractPublisher(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
215
212
  msg = copy.deepcopy(msg) # 字典是可变对象,不要改变影响用户自身的传参字典. 用户可能继续使用这个传参字典.
216
213
  msg, msg_function_kw, extra_params, task_id = self._convert_msg(msg, task_id, priority_control_config)
217
214
  t_start = time.time()
215
+ msg_json = Serialization.to_json_str(msg)
218
216
  decorators.handle_exception(retry_times=10, is_throw_error=True, time_sleep=0.1)(
219
- self.concrete_realization_of_publish)(Serialization.to_json_str(msg))
217
+ self.concrete_realization_of_publish)(msg_json)
220
218
 
221
- self.logger.debug(f'向{self._queue_name} 队列,推送消息 耗时{round(time.time() - t_start, 4)}秒 {msg_function_kw}', extra={'task_id': task_id}) # 显示msg太长了。
219
+ self.logger.debug(f'向{self._queue_name} 队列,推送消息 耗时{round(time.time() - t_start, 4)}秒 {msg_json if self.publisher_params.publish_msg_log_use_full_msg else msg_function_kw}',
220
+ extra={'task_id': task_id}) # 显示msg太长了。
222
221
  with self._lock_for_count:
223
222
  self.count_per_minute += 1
224
223
  self.publish_msg_num_total += 1
@@ -344,8 +343,8 @@ def deco_mq_conn_error(f):
344
343
  except Exception as e:
345
344
  import amqpstorm
346
345
  from pikav1.exceptions import AMQPError as PikaAMQPError
347
- if isinstance(e,(PikaAMQPError, amqpstorm.AMQPError)):
348
- # except (PikaAMQPError, amqpstorm.AMQPError,) as e: # except BaseException as e: # 现在装饰器用到了绝大多出地方,单个异常类型不行。ex
346
+ if isinstance(e, (PikaAMQPError, amqpstorm.AMQPError)):
347
+ # except (PikaAMQPError, amqpstorm.AMQPError,) as e: # except BaseException as e: # 现在装饰器用到了绝大多出地方,单个异常类型不行。ex
349
348
  self.logger.error(f'中间件链接出错 ,方法 {f.__name__} 出错 ,{e}')
350
349
  self.init_broker()
351
350
  return f(self, *args, **kwargs)
@@ -2,35 +2,29 @@
2
2
  集成定时任务。
3
3
  """
4
4
  import atexit
5
- import copy
6
- import importlib
7
-
8
- import pickle
9
5
 
10
6
  import time
11
7
  from apscheduler.executors.pool import BasePoolExecutor
12
8
 
13
- from funboost.utils.decorators import RedisDistributedLockContextManager,RedisDistributedBlockLockContextManager
14
9
  from typing import Union
15
10
  import threading
16
11
 
17
12
  from apscheduler.schedulers.background import BackgroundScheduler
18
- from apscheduler.jobstores.redis import RedisJobStore
19
13
  # noinspection PyProtectedMember
20
14
  from apscheduler.schedulers.base import STATE_STOPPED, STATE_RUNNING
21
- from apscheduler.util import undefined,TIMEOUT_MAX
15
+ from apscheduler.util import undefined, TIMEOUT_MAX
22
16
  import deprecated
23
17
  from funboost.utils.redis_manager import RedisMixin
24
18
 
25
- from funboost.funboost_config_deafult import BrokerConnConfig, FunboostCommonConfig
19
+ from funboost.funboost_config_deafult import FunboostCommonConfig
26
20
 
27
21
  from funboost.consumers.base_consumer import AbstractConsumer
28
22
  from funboost.core.booster import BoostersManager, Booster
29
- from funboost.publishers.base_publisher import AbstractPublisher
23
+
30
24
  from funboost import BoosterParams
31
- from funboost.concurrent_pool.flexible_thread_pool import FlexibleThreadPool
32
25
  from funboost.concurrent_pool.custom_threadpool_executor import ThreadPoolExecutorShrinkAble
33
26
 
27
+
34
28
  @deprecated.deprecated(reason='以后不要再使用这种方式,对于job_store为数据库时候需要序列化不好。使用内存和数据库都兼容的添加任务方式: add_push_job')
35
29
  def timing_publish_deco(consuming_func_decorated_or_consumer: Union[callable, AbstractConsumer]):
36
30
  def _deco(*args, **kwargs):
@@ -49,14 +43,16 @@ def push_fun_params_to_broker(queue_name: str, *args, runonce_uuid=None, **kwarg
49
43
  queue_name 队列名字
50
44
  *args **kwargs 是消费函数的入参
51
45
  发布消息中可以包括,runonce_uuid这个入参,确保分布式多个脚本都启动了定时器,导致每个定时器重复发布到消息队列,值你自己写 str(uuid.uuid4())
46
+ # 不需要传递 runonce_uuid 了,已经用专门的 FunboostBackgroundSchedulerProcessJobsWithinRedisLock 解决了。
52
47
  """
53
- if runonce_uuid:
48
+ if runonce_uuid: # 不需要传递 runonce_uuid 了,已经用专门的 FunboostBackgroundSchedulerProcessJobsWithinRedisLock 解决了 process_jobs的问题。
54
49
  key = 'apscheduler.redisjobstore_runonce2'
55
50
  if RedisMixin().redis_db_frame.sadd(key, runonce_uuid):
56
51
  BoostersManager.get_or_create_booster_by_queue_name(queue_name).push(*args, **kwargs)
57
52
  else:
58
53
  BoostersManager.get_or_create_booster_by_queue_name(queue_name).push(*args, **kwargs)
59
54
 
55
+
60
56
  class ThreadPoolExecutorForAps(BasePoolExecutor):
61
57
  """
62
58
  An executor that runs jobs in a concurrent.futures thread pool.
@@ -68,10 +64,11 @@ class ThreadPoolExecutorForAps(BasePoolExecutor):
68
64
  ThreadPoolExecutor constructor
69
65
  """
70
66
 
71
- def __init__(self, max_workers=10, ):
72
- pool = ThreadPoolExecutorShrinkAble(int(max_workers),)
67
+ def __init__(self, max_workers=10, pool_kwargs=None):
68
+ pool = ThreadPoolExecutorShrinkAble(int(max_workers), )
73
69
  super().__init__(pool)
74
70
 
71
+
75
72
  class FunboostBackgroundScheduler(BackgroundScheduler):
76
73
  """
77
74
  自定义的, 继承了官方BackgroundScheduler,
@@ -126,7 +123,7 @@ class FunboostBackgroundScheduler(BackgroundScheduler):
126
123
  args_list.insert(0, func.queue_name)
127
124
  args = tuple(args_list)
128
125
  kwargs = kwargs or {}
129
- kwargs['runonce_uuid'] = runonce_uuid
126
+ kwargs['runonce_uuid'] = runonce_uuid # 忽略,用户不需要传递runonce_uuid入参。
130
127
  return self.add_job(push_fun_params_to_broker, trigger, args, kwargs, id, name,
131
128
  misfire_grace_time, coalesce, max_instances,
132
129
  next_run_time, jobstore, executor,
@@ -173,7 +170,7 @@ class FunboostBackgroundScheduler(BackgroundScheduler):
173
170
  if wait_seconds is None:
174
171
  wait_seconds = MAX_WAIT_SECONDS_FOR_NEX_PROCESS_JOBS
175
172
  self._last_wait_seconds = min(wait_seconds, MAX_WAIT_SECONDS_FOR_NEX_PROCESS_JOBS)
176
- if wait_seconds in (None,TIMEOUT_MAX):
173
+ if wait_seconds in (None, TIMEOUT_MAX):
177
174
  self._last_has_task = False
178
175
  else:
179
176
  self._last_has_task = True
@@ -5,7 +5,7 @@ import datetime
5
5
  import time
6
6
  import re
7
7
  import pytz
8
-
8
+ from funboost.core.funboost_time import FunboostTime
9
9
 
10
10
  from funboost.utils import nb_print
11
11
 
@@ -75,21 +75,22 @@ class DatetimeConverter:
75
75
  """
76
76
  :param datetimex: 接受时间戳 datatime类型 和 时间字符串三种类型
77
77
  """
78
- if isinstance(datetimex, str):
79
- if not re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', datetimex):
80
- raise ValueError('时间字符串的格式不符合此传参的规定')
81
- else:
82
- self.datetime_obj = datetime.datetime.strptime(datetimex, self.DATETIME_FORMATTER)
83
- elif isinstance(datetimex, (int, float)):
84
- if datetimex < 1:
85
- datetimex += 86400
86
- self.datetime_obj = datetime.datetime.fromtimestamp(datetimex, tz=pytz.timezone(_get_funboost_timezone())) # 时间戳0在windows会出错。
87
- elif isinstance(datetimex, datetime.datetime):
88
- self.datetime_obj = datetimex
89
- elif datetimex is None:
90
- self.datetime_obj = datetime.datetime.now(tz=pytz.timezone(_get_funboost_timezone()))
91
- else:
92
- raise ValueError('实例化时候的传参不符合规定')
78
+ # if isinstance(datetimex, str):
79
+ # if not re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', datetimex):
80
+ # raise ValueError('时间字符串的格式不符合此传参的规定')
81
+ # else:
82
+ # self.datetime_obj = datetime.datetime.strptime(datetimex, self.DATETIME_FORMATTER)
83
+ # elif isinstance(datetimex, (int, float)):
84
+ # if datetimex < 1:
85
+ # datetimex += 86400
86
+ # self.datetime_obj = datetime.datetime.fromtimestamp(datetimex, tz=pytz.timezone(_get_funboost_timezone())) # 时间戳0在windows会出错。
87
+ # elif isinstance(datetimex, datetime.datetime):
88
+ # self.datetime_obj = datetimex
89
+ # elif datetimex is None:
90
+ # self.datetime_obj = datetime.datetime.now(tz=pytz.timezone(_get_funboost_timezone()))
91
+ # else:
92
+ # raise ValueError('实例化时候的传参不符合规定')
93
+ self.datetime_obj = FunboostTime(datetimex).datetime_obj
93
94
 
94
95
  @property
95
96
  def datetime_str(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 46.8
3
+ Version: 47.0
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,6 +1,6 @@
1
- nb_log>=12.6
1
+ nb_log>=13.2
2
2
  nb_libs>=1.8
3
- nb_time>=1.8
3
+ nb_time>=2.0
4
4
  pymongo==4.3.3
5
5
  AMQPStorm==2.10.6
6
6
  rabbitpy==2.0.1
@@ -77,9 +77,9 @@ setup(
77
77
  'Topic :: Software Development :: Libraries'
78
78
  ],
79
79
  install_requires=[
80
- 'nb_log>=12.6',
80
+ 'nb_log>=13.2',
81
81
  'nb_libs>=1.8',
82
- 'nb_time>=1.8',
82
+ 'nb_time>=2.0',
83
83
  'pymongo==4.3.3', # 3.5.1 -> 4.0.2
84
84
  'AMQPStorm==2.10.6',
85
85
  'rabbitpy==2.0.1',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes