funboost 42.9__tar.gz → 43.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 (278) hide show
  1. {funboost-42.9/funboost.egg-info → funboost-43.1}/PKG-INFO +1 -1
  2. {funboost-42.9 → funboost-43.1}/funboost/__init__.py +1 -1
  3. {funboost-42.9 → funboost-43.1}/funboost/constant.py +1 -0
  4. {funboost-42.9 → funboost-43.1}/funboost/consumers/base_consumer.py +21 -14
  5. {funboost-42.9 → funboost-43.1}/funboost/core/cli/discovery_boosters.py +5 -4
  6. {funboost-42.9 → funboost-43.1}/funboost/core/current_task.py +56 -15
  7. {funboost-42.9 → funboost-43.1}/funboost/core/func_params_model.py +6 -4
  8. funboost-43.1/funboost/core/lazy_impoter.py +26 -0
  9. {funboost-42.9 → funboost-43.1}/funboost/core/muliti_process_enhance.py +3 -5
  10. funboost-43.1/funboost/core/task_id_logger.py +19 -0
  11. {funboost-42.9 → funboost-43.1}/funboost/funboost_config_deafult.py +6 -1
  12. {funboost-42.9 → funboost-43.1}/funboost/publishers/base_publisher.py +11 -10
  13. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-37.pyc +0 -0
  14. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +12 -2
  15. {funboost-42.9 → funboost-43.1}/funboost/utils/mongo_util.py +8 -3
  16. {funboost-42.9 → funboost-43.1}/funboost/utils/time_util.py +8 -3
  17. {funboost-42.9 → funboost-43.1/funboost.egg-info}/PKG-INFO +1 -1
  18. {funboost-42.9 → funboost-43.1}/funboost.egg-info/SOURCES.txt +2 -0
  19. {funboost-42.9 → funboost-43.1}/funboost.egg-info/requires.txt +1 -1
  20. {funboost-42.9 → funboost-43.1}/setup.py +1 -1
  21. {funboost-42.9 → funboost-43.1}/LICENSE +0 -0
  22. {funboost-42.9 → funboost-43.1}/MANIFEST.in +0 -0
  23. {funboost-42.9 → funboost-43.1}/README.md +0 -0
  24. {funboost-42.9 → funboost-43.1}/funboost/__init__old.py +0 -0
  25. {funboost-42.9 → funboost-43.1}/funboost/__main__.py +0 -0
  26. {funboost-42.9 → funboost-43.1}/funboost/assist/__init__.py +0 -0
  27. {funboost-42.9 → funboost-43.1}/funboost/assist/celery_helper.py +0 -0
  28. {funboost-42.9 → funboost-43.1}/funboost/assist/dramatiq_helper.py +0 -0
  29. {funboost-42.9 → funboost-43.1}/funboost/assist/huey_helper.py +0 -0
  30. {funboost-42.9 → funboost-43.1}/funboost/assist/rocketry_helper.py +0 -0
  31. {funboost-42.9 → funboost-43.1}/funboost/assist/rq_helper.py +0 -0
  32. {funboost-42.9 → funboost-43.1}/funboost/assist/rq_windows_worker.py +0 -0
  33. {funboost-42.9 → funboost-43.1}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
  34. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/__init__.py +0 -0
  35. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/async_helper.py +0 -0
  36. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/async_pool_executor.py +0 -0
  37. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/backup/__init__.py +0 -0
  38. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
  39. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
  40. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
  41. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/base_pool_type.py +0 -0
  42. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
  43. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
  44. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
  45. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
  46. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
  47. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
  48. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/custom_threadpool_executor.py +0 -0
  49. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
  50. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
  51. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
  52. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/pool_commons.py +0 -0
  53. {funboost-42.9 → funboost-43.1}/funboost/concurrent_pool/single_thread_executor.py +0 -0
  54. {funboost-42.9 → funboost-43.1}/funboost/consumers/__init__.py +0 -0
  55. {funboost-42.9 → funboost-43.1}/funboost/consumers/celery_consumer.py +0 -0
  56. {funboost-42.9 → funboost-43.1}/funboost/consumers/confirm_mixin.py +0 -0
  57. {funboost-42.9 → funboost-43.1}/funboost/consumers/dramatiq_consumer.py +0 -0
  58. {funboost-42.9 → funboost-43.1}/funboost/consumers/http_consumer.py +0 -0
  59. {funboost-42.9 → funboost-43.1}/funboost/consumers/http_consumer000.py +0 -0
  60. {funboost-42.9 → funboost-43.1}/funboost/consumers/httpsqs_consumer.py +0 -0
  61. {funboost-42.9 → funboost-43.1}/funboost/consumers/huey_consumer.py +0 -0
  62. {funboost-42.9 → funboost-43.1}/funboost/consumers/kafka_consumer.py +0 -0
  63. {funboost-42.9 → funboost-43.1}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
  64. {funboost-42.9 → funboost-43.1}/funboost/consumers/kombu_consumer.py +0 -0
  65. {funboost-42.9 → funboost-43.1}/funboost/consumers/local_python_queue_consumer.py +0 -0
  66. {funboost-42.9 → funboost-43.1}/funboost/consumers/memory_deque_consumer.py +0 -0
  67. {funboost-42.9 → funboost-43.1}/funboost/consumers/mongomq_consumer.py +0 -0
  68. {funboost-42.9 → funboost-43.1}/funboost/consumers/mqtt_consumer.py +0 -0
  69. {funboost-42.9 → funboost-43.1}/funboost/consumers/nameko_consumer.py +0 -0
  70. {funboost-42.9 → funboost-43.1}/funboost/consumers/nats_consumer.py +0 -0
  71. {funboost-42.9 → funboost-43.1}/funboost/consumers/nsq_consumer.py +0 -0
  72. {funboost-42.9 → funboost-43.1}/funboost/consumers/peewee_conusmer.py +0 -0
  73. {funboost-42.9 → funboost-43.1}/funboost/consumers/persist_queue_consumer.py +0 -0
  74. {funboost-42.9 → funboost-43.1}/funboost/consumers/pulsar_consumer.py +0 -0
  75. {funboost-42.9 → funboost-43.1}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -0
  76. {funboost-42.9 → funboost-43.1}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
  77. {funboost-42.9 → funboost-43.1}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
  78. {funboost-42.9 → funboost-43.1}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
  79. {funboost-42.9 → funboost-43.1}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
  80. {funboost-42.9 → funboost-43.1}/funboost/consumers/redis_consumer.py +0 -0
  81. {funboost-42.9 → funboost-43.1}/funboost/consumers/redis_consumer_ack_able.py +0 -0
  82. {funboost-42.9 → funboost-43.1}/funboost/consumers/redis_consumer_priority.py +0 -0
  83. {funboost-42.9 → funboost-43.1}/funboost/consumers/redis_consumer_simple.py +0 -0
  84. {funboost-42.9 → funboost-43.1}/funboost/consumers/redis_filter.py +0 -0
  85. {funboost-42.9 → funboost-43.1}/funboost/consumers/redis_pubsub_consumer.py +0 -0
  86. {funboost-42.9 → funboost-43.1}/funboost/consumers/redis_stream_consumer.py +0 -0
  87. {funboost-42.9 → funboost-43.1}/funboost/consumers/rocketmq_consumer.py +0 -0
  88. {funboost-42.9 → funboost-43.1}/funboost/consumers/rq_consumer.py +0 -0
  89. {funboost-42.9 → funboost-43.1}/funboost/consumers/sqlachemy_consumer.py +0 -0
  90. {funboost-42.9 → funboost-43.1}/funboost/consumers/tcp_consumer.py +0 -0
  91. {funboost-42.9 → funboost-43.1}/funboost/consumers/txt_file_consumer.py +0 -0
  92. {funboost-42.9 → funboost-43.1}/funboost/consumers/udp_consumer.py +0 -0
  93. {funboost-42.9 → funboost-43.1}/funboost/consumers/zeromq_consumer.py +0 -0
  94. {funboost-42.9 → funboost-43.1}/funboost/contrib/__init__.py +0 -0
  95. {funboost-42.9 → funboost-43.1}/funboost/contrib/api_publish_msg.py +0 -0
  96. {funboost-42.9 → funboost-43.1}/funboost/contrib/django_db_deco.py +0 -0
  97. {funboost-42.9 → funboost-43.1}/funboost/contrib/queue2queue.py +0 -0
  98. {funboost-42.9 → funboost-43.1}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
  99. {funboost-42.9 → funboost-43.1}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
  100. {funboost-42.9 → funboost-43.1}/funboost/core/__init__.py +0 -0
  101. {funboost-42.9 → funboost-43.1}/funboost/core/active_cousumer_info_getter.py +0 -0
  102. {funboost-42.9 → funboost-43.1}/funboost/core/booster.py +0 -0
  103. {funboost-42.9 → funboost-43.1}/funboost/core/cli/__init__.py +0 -0
  104. {funboost-42.9 → funboost-43.1}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
  105. {funboost-42.9 → funboost-43.1}/funboost/core/cli/funboost_fire.py +0 -0
  106. {funboost-42.9 → funboost-43.1}/funboost/core/exceptions.py +0 -0
  107. {funboost-42.9 → funboost-43.1}/funboost/core/fabric_deploy_helper.py +0 -0
  108. {funboost-42.9 → funboost-43.1}/funboost/core/function_result_status_config.py +0 -0
  109. {funboost-42.9 → funboost-43.1}/funboost/core/function_result_status_saver.py +0 -0
  110. {funboost-42.9 → funboost-43.1}/funboost/core/helper_funs.py +0 -0
  111. {funboost-42.9 → funboost-43.1}/funboost/core/kill_remote_task.py +0 -0
  112. {funboost-42.9 → funboost-43.1}/funboost/core/loggers.py +0 -0
  113. {funboost-42.9 → funboost-43.1}/funboost/core/msg_result_getter.py +0 -0
  114. {funboost-42.9 → funboost-43.1}/funboost/core/try_get_user_funboost_common_config.py +0 -0
  115. {funboost-42.9 → funboost-43.1}/funboost/factories/__init__.py +0 -0
  116. {funboost-42.9 → funboost-43.1}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +0 -0
  117. {funboost-42.9 → funboost-43.1}/funboost/factories/consumer_factory.py +0 -0
  118. {funboost-42.9 → funboost-43.1}/funboost/factories/publisher_factotry.py +0 -0
  119. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/__pycache__/app.cpython-37.pyc +0 -0
  120. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/__pycache__/functions.cpython-37.pyc +0 -0
  121. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/app.py +0 -0
  122. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/functions.py +0 -0
  123. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/assets/css/custom.css +0 -0
  124. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
  125. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
  126. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/assets/js/custom.js +0 -0
  127. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
  128. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/css/style.css +0 -0
  129. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/images/bg.jpg +0 -0
  130. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/images/password.png +0 -0
  131. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/images/tick.png +0 -0
  132. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/images/user.png +0 -0
  133. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
  134. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/templates/index.html +0 -0
  135. {funboost-42.9 → funboost-43.1}/funboost/function_result_web/templates/login.html +0 -0
  136. {funboost-42.9 → funboost-43.1}/funboost/publishers/__init__.py +0 -0
  137. {funboost-42.9 → funboost-43.1}/funboost/publishers/celery_publisher.py +0 -0
  138. {funboost-42.9 → funboost-43.1}/funboost/publishers/celery_publisher000.py +0 -0
  139. {funboost-42.9 → funboost-43.1}/funboost/publishers/confluent_kafka_publisher.py +0 -0
  140. {funboost-42.9 → funboost-43.1}/funboost/publishers/dramatiq_publisher.py +0 -0
  141. {funboost-42.9 → funboost-43.1}/funboost/publishers/http_publisher.py +0 -0
  142. {funboost-42.9 → funboost-43.1}/funboost/publishers/httpsqs_publisher.py +0 -0
  143. {funboost-42.9 → funboost-43.1}/funboost/publishers/huey_publisher.py +0 -0
  144. {funboost-42.9 → funboost-43.1}/funboost/publishers/kafka_publisher.py +0 -0
  145. {funboost-42.9 → funboost-43.1}/funboost/publishers/kombu_publisher.py +0 -0
  146. {funboost-42.9 → funboost-43.1}/funboost/publishers/local_python_queue_publisher.py +0 -0
  147. {funboost-42.9 → funboost-43.1}/funboost/publishers/meomory_deque_publisher.py +0 -0
  148. {funboost-42.9 → funboost-43.1}/funboost/publishers/mongomq_publisher.py +0 -0
  149. {funboost-42.9 → funboost-43.1}/funboost/publishers/mqtt_publisher.py +0 -0
  150. {funboost-42.9 → funboost-43.1}/funboost/publishers/nameko_publisher.py +0 -0
  151. {funboost-42.9 → funboost-43.1}/funboost/publishers/nats_publisher.py +0 -0
  152. {funboost-42.9 → funboost-43.1}/funboost/publishers/nsq_publisher.py +0 -0
  153. {funboost-42.9 → funboost-43.1}/funboost/publishers/peewee_publisher.py +0 -0
  154. {funboost-42.9 → funboost-43.1}/funboost/publishers/persist_queue_publisher.py +0 -0
  155. {funboost-42.9 → funboost-43.1}/funboost/publishers/pulsar_publisher.py +0 -0
  156. {funboost-42.9 → funboost-43.1}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
  157. {funboost-42.9 → funboost-43.1}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
  158. {funboost-42.9 → funboost-43.1}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
  159. {funboost-42.9 → funboost-43.1}/funboost/publishers/redis_publisher.py +0 -0
  160. {funboost-42.9 → funboost-43.1}/funboost/publishers/redis_publisher_lpush.py +0 -0
  161. {funboost-42.9 → funboost-43.1}/funboost/publishers/redis_publisher_priority.py +0 -0
  162. {funboost-42.9 → funboost-43.1}/funboost/publishers/redis_publisher_simple.py +0 -0
  163. {funboost-42.9 → funboost-43.1}/funboost/publishers/redis_pubsub_publisher.py +0 -0
  164. {funboost-42.9 → funboost-43.1}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
  165. {funboost-42.9 → funboost-43.1}/funboost/publishers/redis_stream_publisher.py +0 -0
  166. {funboost-42.9 → funboost-43.1}/funboost/publishers/rocketmq_publisher.py +0 -0
  167. {funboost-42.9 → funboost-43.1}/funboost/publishers/rq_publisher.py +0 -0
  168. {funboost-42.9 → funboost-43.1}/funboost/publishers/sqla_queue_publisher.py +0 -0
  169. {funboost-42.9 → funboost-43.1}/funboost/publishers/tcp_publisher.py +0 -0
  170. {funboost-42.9 → funboost-43.1}/funboost/publishers/txt_file_publisher.py +0 -0
  171. {funboost-42.9 → funboost-43.1}/funboost/publishers/udp_publisher.py +0 -0
  172. {funboost-42.9 → funboost-43.1}/funboost/publishers/zeromq_publisher.py +0 -0
  173. {funboost-42.9 → funboost-43.1}/funboost/queues/__init__.py +0 -0
  174. {funboost-42.9 → funboost-43.1}/funboost/queues/peewee_queue.py +0 -0
  175. {funboost-42.9 → funboost-43.1}/funboost/queues/sqla_queue.py +0 -0
  176. {funboost-42.9 → funboost-43.1}/funboost/set_frame_config.py +0 -0
  177. {funboost-42.9 → funboost-43.1}/funboost/timing_job/__init__.py +0 -0
  178. {funboost-42.9 → funboost-43.1}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
  179. {funboost-42.9 → funboost-43.1}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
  180. {funboost-42.9 → funboost-43.1}/funboost/utils/__init__.py +0 -0
  181. {funboost-42.9 → funboost-43.1}/funboost/utils/apscheduler_monkey.py +0 -0
  182. {funboost-42.9 → funboost-43.1}/funboost/utils/block_exit.py +0 -0
  183. {funboost-42.9 → funboost-43.1}/funboost/utils/bulk_operation.py +0 -0
  184. {funboost-42.9 → funboost-43.1}/funboost/utils/ctrl_c_end.py +0 -0
  185. {funboost-42.9 → funboost-43.1}/funboost/utils/custom_pysnooper.py +0 -0
  186. {funboost-42.9 → funboost-43.1}/funboost/utils/decorators.py +0 -0
  187. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages/__init__.py +0 -0
  188. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
  189. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
  190. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
  191. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
  192. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
  193. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
  194. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
  195. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-311.pyc +0 -0
  196. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-37.pyc +0 -0
  197. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
  198. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-311.pyc +0 -0
  199. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-37.pyc +0 -0
  200. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
  201. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
  202. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
  203. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-311.pyc +0 -0
  204. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-37.pyc +0 -0
  205. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
  206. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-311.pyc +0 -0
  207. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-37.pyc +0 -0
  208. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
  209. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-311.pyc +0 -0
  210. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-37.pyc +0 -0
  211. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
  212. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-311.pyc +0 -0
  213. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-37.pyc +0 -0
  214. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
  215. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-311.pyc +0 -0
  216. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-37.pyc +0 -0
  217. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
  218. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-311.pyc +0 -0
  219. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-37.pyc +0 -0
  220. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
  221. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-311.pyc +0 -0
  222. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-37.pyc +0 -0
  223. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
  224. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
  225. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
  226. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
  227. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
  228. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
  229. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
  230. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
  231. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -0
  232. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
  233. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
  234. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
  235. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
  236. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-311.pyc +0 -0
  237. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-37.pyc +0 -0
  238. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
  239. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-311.pyc +0 -0
  240. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-37.pyc +0 -0
  241. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
  242. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-311.pyc +0 -0
  243. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
  244. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-311.pyc +0 -0
  245. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-37.pyc +0 -0
  246. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
  247. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-311.pyc +0 -0
  248. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-37.pyc +0 -0
  249. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
  250. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
  251. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
  252. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
  253. {funboost-42.9 → funboost-43.1}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -0
  254. {funboost-42.9 → funboost-43.1}/funboost/utils/develop_log.py +0 -0
  255. {funboost-42.9 → funboost-43.1}/funboost/utils/expire_lock.py +0 -0
  256. {funboost-42.9 → funboost-43.1}/funboost/utils/json_helper.py +0 -0
  257. {funboost-42.9 → funboost-43.1}/funboost/utils/monkey_color_log.py +0 -0
  258. {funboost-42.9 → funboost-43.1}/funboost/utils/monkey_patches.py +0 -0
  259. {funboost-42.9 → funboost-43.1}/funboost/utils/mqtt_util.py +0 -0
  260. {funboost-42.9 → funboost-43.1}/funboost/utils/paramiko_util.py +0 -0
  261. {funboost-42.9 → funboost-43.1}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
  262. {funboost-42.9 → funboost-43.1}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
  263. {funboost-42.9 → funboost-43.1}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
  264. {funboost-42.9 → funboost-43.1}/funboost/utils/pysnooper_ydf/utils.py +0 -0
  265. {funboost-42.9 → funboost-43.1}/funboost/utils/pysnooper_ydf/variables.py +0 -0
  266. {funboost-42.9 → funboost-43.1}/funboost/utils/rabbitmq_factory.py +0 -0
  267. {funboost-42.9 → funboost-43.1}/funboost/utils/redis_manager.py +0 -0
  268. {funboost-42.9 → funboost-43.1}/funboost/utils/redis_manager_old.py +0 -0
  269. {funboost-42.9 → funboost-43.1}/funboost/utils/resource_monitoring.py +0 -0
  270. {funboost-42.9 → funboost-43.1}/funboost/utils/restart_python.py +0 -0
  271. {funboost-42.9 → funboost-43.1}/funboost/utils/simple_data_class.py +0 -0
  272. {funboost-42.9 → funboost-43.1}/funboost/utils/times/__init__.py +0 -0
  273. {funboost-42.9 → funboost-43.1}/funboost/utils/times/version.py +0 -0
  274. {funboost-42.9 → funboost-43.1}/funboost/utils/un_strict_json_dumps.py +0 -0
  275. {funboost-42.9 → funboost-43.1}/funboost.egg-info/dependency_links.txt +0 -0
  276. {funboost-42.9 → funboost-43.1}/funboost.egg-info/entry_points.txt +0 -0
  277. {funboost-42.9 → funboost-43.1}/funboost.egg-info/top_level.txt +0 -0
  278. {funboost-42.9 → funboost-43.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 42.9
3
+ Version: 43.1
4
4
  Summary: pip install funboost,python全功能分布式函数调度框架,。支持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__ = "42.9"
16
+ __version__ = "43.1"
17
17
 
18
18
  from funboost.set_frame_config import show_frame_config
19
19
 
@@ -89,5 +89,6 @@ class ConcurrentModeEnum:
89
89
  EVENTLET = 'eventlet'
90
90
  ASYNC = 'async' # asyncio并发,适用于async def定义的函数。
91
91
  SINGLE_THREAD = 'single_thread' # 如果你不想并发,不想预先从消息队列中间件拉取消息到python程序的内存queue队列缓冲中,那么就适合使用此并发模式。
92
+ SOLO = SINGLE_THREAD
92
93
 
93
94
  # is_fsdf_remote_run = 0
@@ -7,6 +7,7 @@
7
7
 
8
8
  框架做主要的功能都是在这个文件里面实现的.
9
9
  """
10
+ import functools
10
11
  import typing
11
12
  import abc
12
13
  import copy
@@ -29,10 +30,11 @@ from threading import Lock
29
30
  import asyncio
30
31
 
31
32
  import nb_log
32
- from funboost.core.current_task import funboost_current_task
33
+ from funboost.core.current_task import funboost_current_task, get_current_taskid
33
34
  from funboost.core.loggers import develop_logger
34
35
 
35
36
  from funboost.core.func_params_model import BoosterParams, PublisherParams
37
+ from funboost.core.task_id_logger import TaskIdLogger
36
38
  from nb_log import (get_logger, LoggerLevelSetterMixin, LogManager, CompatibleLogger,
37
39
  LoggerMixinDefaultWithFileHandler, stdout_write, is_main_process,
38
40
  nb_log_config_default)
@@ -67,6 +69,8 @@ from funboost.utils import decorators, time_util, redis_manager
67
69
  from funboost.constant import ConcurrentModeEnum, BrokerEnum
68
70
  from funboost.core import kill_remote_task
69
71
  from funboost.core.exceptions import ExceptionForRequeue, ExceptionForPushToDlxqueue
72
+ # from funboost.core.booster import BoostersManager 互相导入
73
+ from funboost.core.lazy_impoter import LazyImpoter
70
74
 
71
75
 
72
76
  # patch_apscheduler_run_job()
@@ -76,9 +80,6 @@ class GlobalVars:
76
80
  has_start_a_consumer_flag = False
77
81
 
78
82
 
79
-
80
-
81
-
82
83
  # noinspection DuplicatedCode
83
84
  class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
84
85
  time_interval_for_check_do_not_run_time = 60
@@ -218,6 +219,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
218
219
  logger_prefix=consumer_params.logger_prefix,
219
220
  create_logger_file=consumer_params.create_logger_file,
220
221
  log_filename=consumer_params.log_filename,
222
+ logger_name=consumer_params.logger_name,
221
223
  broker_exclusive_config=self.consumer_params.broker_exclusive_config)
222
224
  if is_main_process:
223
225
  self.logger.info(f'{self.queue_name} consumer 的消费者配置:\n {self.consumer_params.json_str_value()}')
@@ -228,13 +230,14 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
228
230
  if logger_prefix != '':
229
231
  logger_prefix += '--'
230
232
  # logger_name = f'{logger_prefix}{self.__class__.__name__}--{concurrent_name}--{queue_name}--{self.consuming_function.__name__}'
231
- logger_name = f'funboost.{logger_prefix}{self.__class__.__name__}--{self.queue_name}'
233
+ logger_name = self.consumer_params.logger_name or f'funboost.{logger_prefix}{self.__class__.__name__}--{self.queue_name}'
234
+ self.logger_name = logger_name
232
235
  log_filename = self.consumer_params.log_filename or f'funboost.{self.queue_name}.log'
233
- self.logger = get_logger(logger_name,
234
- log_level_int=self.consumer_params.log_level,
235
- log_filename=log_filename if self.consumer_params.create_logger_file else None,
236
- error_log_filename=nb_log.generate_error_file_name(log_filename),
237
- formatter_template=FunboostCommonConfig.NB_LOG_FORMATER_INDEX_FOR_CONSUMER_AND_PUBLISHER, )
236
+ self.logger = LogManager(logger_name, logger_cls=TaskIdLogger).get_logger_and_add_handlers(
237
+ log_level_int=self.consumer_params.log_level,
238
+ log_filename=log_filename if self.consumer_params.create_logger_file else None,
239
+ error_log_filename=nb_log.generate_error_file_name(log_filename),
240
+ formatter_template=FunboostCommonConfig.NB_LOG_FORMATER_INDEX_FOR_CONSUMER_AND_PUBLISHER, )
238
241
  self.logger.info(f'队列 {self.queue_name} 的日志写入到 {nb_log_config_default.LOG_PATH} 文件夹的 {log_filename} 和 {nb_log.generate_error_file_name(log_filename)} 文件中')
239
242
 
240
243
  def _check_broker_exclusive_config(self):
@@ -362,8 +365,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
362
365
  key = 'apscheduler.redisjobstore_runonce'
363
366
  if RedisMixin().redis_db_frame.sadd(key, runonce_uuid): # 这样可以阻止多次启动同队列名消费者 redis jobstore多次运行函数.
364
367
  cls.logger_apscheduler.debug(f'延时任务用普通消息重新发布到普通队列 {msg}')
365
- from funboost.core.booster import BoostersManager
366
- BoostersManager.get_or_create_booster_by_queue_name(queue_name).publish(msg)
368
+ LazyImpoter().BoostersManager.get_or_create_booster_by_queue_name(queue_name).publish(msg)
367
369
 
368
370
  @abc.abstractmethod
369
371
  def _shedual_task(self):
@@ -603,9 +605,10 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
603
605
  t_start = time.time()
604
606
  # function_result_status.run_times = current_retry_times + 1
605
607
  fct = funboost_current_task()
606
- fct.function_params=function_only_params
607
- fct.full_msg=kw['body']
608
+ fct.function_params = function_only_params
609
+ fct.full_msg = kw['body']
608
610
  fct.function_result_status = function_result_status
611
+ fct.logger = self.logger
609
612
  try:
610
613
  function_run = self.consuming_function
611
614
  if self._consuming_function_is_asyncio:
@@ -633,6 +636,9 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
633
636
  function_result_status.success = True
634
637
  if self.consumer_params.log_level <= logging.DEBUG:
635
638
  result_str_to_be_print = str(function_result_status.result)[:100] if len(str(function_result_status.result)) < 100 else str(function_result_status.result)[:100] + ' 。。。。。 '
639
+ # print(funboost_current_task().task_id)
640
+ # print(fct.function_result_status.task_id)
641
+ # print(get_current_taskid())
636
642
  self.logger.debug(f' 函数 {self.consuming_function.__name__} '
637
643
  f'第{current_retry_times + 1}次 运行, 正确了,函数运行时间是 {round(time.time() - t_start, 4)} 秒,入参是 {function_only_params} , '
638
644
  f'结果是 {result_str_to_be_print} {self._get_concurrent_info()} ')
@@ -768,6 +774,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
768
774
  fct.function_params = function_only_params
769
775
  fct.full_msg = kw['body']
770
776
  fct.function_result_status = function_result_status
777
+ fct.logger = self.logger
771
778
  try:
772
779
  corotinue_obj = self.consuming_function(**function_only_params)
773
780
  if not asyncio.iscoroutine(corotinue_obj):
@@ -7,7 +7,7 @@ import importlib.util
7
7
  # import nb_log
8
8
  from funboost.core.loggers import FunboostFileLoggerMixin
9
9
  from funboost.utils.decorators import flyweight
10
-
10
+ from funboost.core.lazy_impoter import lazy_impoter
11
11
 
12
12
  @flyweight
13
13
  class BoosterDiscovery(FunboostFileLoggerMixin):
@@ -63,11 +63,12 @@ class BoosterDiscovery(FunboostFileLoggerMixin):
63
63
  if Path(file_path) == Path(sys._getframe(1).f_code.co_filename):
64
64
  self.logger.warning(f'排除导入调用auto_discovery的模块自身 {file_path}') # 否则下面的import这个文件,会造成无限懵逼死循环
65
65
  continue
66
- spec = importlib.util.spec_from_file_location('module', file_path)
66
+
67
+ module_name = Path(file_path).as_posix().replace('/', '.') + '.' + Path(file_path).stem
68
+ spec = importlib.util.spec_from_file_location(module_name, file_path)
67
69
  module = importlib.util.module_from_spec(spec)
68
70
  spec.loader.exec_module(module)
69
- from funboost.core.booster import BoostersManager
70
- BoostersManager.show_all_boosters()
71
+ lazy_impoter.BoostersManager.show_all_boosters()
71
72
 
72
73
 
73
74
  if __name__ == '__main__':
@@ -1,14 +1,10 @@
1
1
  import contextvars
2
+ import logging
2
3
  import threading
3
4
  import asyncio
4
5
  from funboost.core.function_result_status_saver import FunctionResultStatus
5
6
 
6
-
7
- class ThreadCurrentTask:
8
- """
9
- 用于在用户自己函数内部去获取 消息的完整体,当前重试次数等.
10
- """
11
- """ 用法例子
7
+ """ 用法例子
12
8
  '''
13
9
  fct = funboost_current_task()
14
10
  print(fct.function_result_status.get_status_dict())
@@ -49,33 +45,54 @@ if __name__ == '__main__':
49
45
  f.consume()
50
46
 
51
47
  """
52
- _local_data = threading.local()
48
+
49
+
50
+ class __ThreadCurrentTask:
51
+ """
52
+ 用于在用户自己函数内部去获取 消息的完整体,当前重试次数等.
53
+ """
54
+
55
+
56
+ _fct_local_data = threading.local()
57
+
53
58
 
54
59
  @property
55
60
  def function_params(self):
56
- return self._local_data.function_params
61
+ return self._fct_local_data.function_params
57
62
 
58
63
  @function_params.setter
59
64
  def function_params(self, function_params: dict):
60
- self._local_data.function_params = function_params
65
+ self._fct_local_data.function_params = function_params
61
66
 
62
67
  @property
63
68
  def full_msg(self) -> dict:
64
- return self._local_data.full_msg
69
+ return self._fct_local_data.full_msg
65
70
 
66
71
  @full_msg.setter
67
72
  def full_msg(self, full_msg: dict):
68
- self._local_data.full_msg = full_msg
73
+ self._fct_local_data.full_msg = full_msg
69
74
 
70
75
  @property
71
76
  def function_result_status(self) -> FunctionResultStatus:
72
- return self._local_data.function_result_status
77
+ return self._fct_local_data.function_result_status
73
78
 
74
79
  @function_result_status.setter
75
80
  def function_result_status(self, function_result_status: FunctionResultStatus):
76
- self._local_data.function_result_status = function_result_status
81
+ self._fct_local_data.function_result_status = function_result_status
77
82
 
83
+ @property
84
+ def task_id(self) -> FunctionResultStatus:
85
+ return self.function_result_status.task_id
86
+
87
+ @property
88
+ def logger(self) -> logging.Logger:
89
+ return self._fct_local_data.logger
78
90
 
91
+ @logger.setter
92
+ def logger(self, logger: logging.Logger):
93
+ self._fct_local_data.logger = logger
94
+
95
+ thread_current_task = __ThreadCurrentTask()
79
96
  def is_asyncio_environment():
80
97
  try:
81
98
  loop = asyncio.get_running_loop()
@@ -84,10 +101,11 @@ def is_asyncio_environment():
84
101
  return False
85
102
 
86
103
 
87
- class AsyncioCurrentTask:
104
+ class __AsyncioCurrentTask:
88
105
  _function_params = contextvars.ContextVar("function_params")
89
106
  _full_msg = contextvars.ContextVar("full_msg")
90
107
  _function_result_status = contextvars.ContextVar("function_result_status")
108
+ _logger = contextvars.ContextVar('logger')
91
109
 
92
110
  @property
93
111
  def function_params(self):
@@ -113,14 +131,37 @@ class AsyncioCurrentTask:
113
131
  def function_result_status(self, function_result_status: FunctionResultStatus):
114
132
  self._function_result_status.set(function_result_status)
115
133
 
134
+ @property
135
+ def task_id(self) :
136
+ return self.function_result_status.task_id
137
+
138
+ @property
139
+ def logger(self) -> logging.Logger:
140
+ return self._logger.get()
141
+
142
+ @logger.setter
143
+ def logger(self, logger: logging.Logger):
144
+ self._logger.set(logger)
145
+
146
+ asyncio_current_task = __AsyncioCurrentTask()
116
147
 
117
148
  def funboost_current_task():
118
- return AsyncioCurrentTask() if is_asyncio_environment() else ThreadCurrentTask()
149
+ return asyncio_current_task if is_asyncio_environment() else thread_current_task
119
150
 
120
151
 
152
+ def get_current_taskid():
153
+ fct = funboost_current_task()
154
+ # return fct.function_result_status.task_id
155
+ try:
156
+ return fct.task_id # 不在funboost的消费函数里面就获取不到上下文了
157
+ except (AttributeError,LookupError) as e:
158
+ # print(e,type(e))
159
+ return 'no_task_id'
160
+
121
161
  if __name__ == '__main__':
122
162
  print(is_asyncio_environment())
123
163
  print()
124
164
  for i in range(100000):
125
165
  funboost_current_task()
166
+ get_current_taskid()
126
167
  print()
@@ -138,11 +138,12 @@ class BoosterParams(BaseJsonAbleModel):
138
138
  is_push_to_dlx_queue_when_retry_max_times: bool = False # 函数达到最大重试次数仍然没成功,是否发送到死信队列,死信队列的名字是 队列名字 + _dlx。
139
139
 
140
140
  consumin_function_decorator: typing.Callable = None # 函数的装饰器。因为此框架做参数自动转指点,需要获取精准的入参名称,不支持在消费函数上叠加 @ *args **kwargs的装饰器,如果想用装饰器可以这里指定。
141
- function_timeout: typing.Union[int, float] = 0 # 超时秒数,函数运行超过这个时间,则自动杀死函数。为0是不限制。
141
+ function_timeout: typing.Union[int, float] = 0 # 超时秒数,函数运行超过这个时间,则自动杀死函数。为0是不限制。 谨慎使用,非必要别去设置超时时间,设置后性能会降低(因为需要把用户函数包装到另一个线单独的程中去运行),而且突然强制超时杀死运行中函数,可能会造成死锁.(例如用户函数在获得线程锁后突然杀死函数,别的线程再也无法获得锁了)
142
142
 
143
143
  log_level: int = logging.DEBUG # 消费者和发布者的日志级别,建议设置DEBUG级别,不然无法知道正在运行什么消息
144
144
  logger_prefix: str = '' # 日志名字前缀,可以设置前缀
145
145
  create_logger_file: bool = True # 发布者和消费者是否创建文件文件日志,为False则只打印控制台不写文件.
146
+ logger_name: str = '' # 队列消费者发布者的日志命名空间.
146
147
  log_filename: typing.Union[str, None] = None # 消费者发布者的文件日志名字.如果为None,则自动使用 funboost.队列 名字作为文件日志名字. 日志文件夹是在nb_log_config.py的 LOG_PATH中决定的.
147
148
  is_show_message_get_from_broker: bool = False # 运行时候,是否记录从消息队列获取出来的消息内容
148
149
  is_print_detail_exception: bool = True # 消费函数出错时候,是否打印详细的报错堆栈,为False则只打印简略的报错信息不包含堆栈.
@@ -160,7 +161,7 @@ class BoosterParams(BaseJsonAbleModel):
160
161
  is_using_rpc_mode: bool = False # 是否使用rpc模式,可以在发布端获取消费端的结果回调,但消耗一定性能,使用async_result.result时候会等待阻塞住当前线程。
161
162
  rpc_result_expire_seconds: int = 600 # 保存rpc结果的过期时间.
162
163
 
163
- is_support_remote_kill_task: bool = False # 是否支持远程任务杀死功能,如果任务数量少,单个任务耗时长,确实需要远程发送命令来杀死正在运行的函数,才设置为true,否则不建议开启此功能。
164
+ is_support_remote_kill_task: bool = False # 是否支持远程任务杀死功能,如果任务数量少,单个任务耗时长,确实需要远程发送命令来杀死正在运行的函数,才设置为true,否则不建议开启此功能。(是把函数放在单独的线程中实现的,随时准备线程被远程命令杀死,所以性能会降低)
164
165
 
165
166
  is_do_not_run_by_specify_time_effect: bool = False # 是否使不运行的时间段生效
166
167
  do_not_run_by_specify_time: tuple = ('10:00:00', '22:00:00') # 不运行的时间段,在这个时间段自动不运行函数.
@@ -193,7 +194,7 @@ class BoosterParams(BaseJsonAbleModel):
193
194
  # if not set(values.keys()).issubset(set(BoosterParams.__fields__.keys())):
194
195
  # raise ValueError(f'{cls.__name__} 的字段包含了父类 BoosterParams 不存在的字段')
195
196
  for k in values.keys():
196
- if k not in BoosterParams.__fields__.keys():
197
+ if k not in BoosterParams.model_fields.keys():
197
198
  raise ValueError(f'{cls.__name__} 的字段新增了父类 BoosterParams 不存在的字段 "{k}"') # 使 BoosterParams的子类,不能增加字段,只能覆盖字段.
198
199
  return values
199
200
 
@@ -224,7 +225,7 @@ class PriorityConsumingControlConfig(BaseJsonAbleModel):
224
225
  例如消费为add函数,可以每个独立的任务设置不同的超时时间,不同的重试次数,是否使用rpc模式。这里的配置优先,可以覆盖生成消费者时候的配置。
225
226
  """
226
227
 
227
- function_timeout: typing.Union[float, int] = None
228
+ function_timeout: typing.Union[float, int] = 0
228
229
  max_retry_times: int = None
229
230
  is_print_detail_exception: bool = None
230
231
  msg_expire_senconds: int = None
@@ -248,6 +249,7 @@ class PublisherParams(BaseJsonAbleModel):
248
249
  log_level: int = logging.DEBUG
249
250
  logger_prefix: str = ''
250
251
  create_logger_file: bool = True
252
+ logger_name: str = '' # 队列消费者发布者的日志命名空间.
251
253
  log_filename: typing.Optional[str] = None
252
254
  clear_queue_within_init: bool = False # with 语法发布时候,先清空消息队列
253
255
  consuming_function: typing.Callable = None # consuming_function 作用是 inspect 模块获取函数的入参信息
@@ -0,0 +1,26 @@
1
+ from funboost.utils.decorators import cached_method_result
2
+
3
+
4
+ class LazyImpoter:
5
+ """
6
+ 延迟导入,避免需要互相导入.
7
+ """
8
+
9
+ @property
10
+ @cached_method_result
11
+ def BoostersManager(self):
12
+ from funboost.core.booster import BoostersManager
13
+ return BoostersManager
14
+
15
+ # @property
16
+ # @cached_method_result
17
+ # def get_current_taskid(self):
18
+ # from funboost.core.current_task import get_current_taskid
19
+ # return get_current_taskid
20
+
21
+ lazy_impoter = LazyImpoter()
22
+
23
+ if __name__ == '__main__':
24
+ for i in range(10000):
25
+ lazy_impoter.BoostersManager
26
+ lazy_impoter.BoostersManager
@@ -7,12 +7,11 @@ from concurrent.futures import ProcessPoolExecutor
7
7
  from funboost.core.booster import Booster
8
8
  from funboost.core.helper_funs import run_forever
9
9
  from funboost.core.loggers import flogger
10
-
10
+ from funboost.core.lazy_impoter import lazy_impoter
11
11
 
12
12
 
13
13
  def _run_consumer_in_new_process(queue_name, ):
14
- from funboost.core.booster import BoostersManager
15
- booster_current_pid = BoostersManager.get_or_create_booster_by_queue_name(queue_name)
14
+ booster_current_pid = lazy_impoter.BoostersManager.get_or_create_booster_by_queue_name(queue_name)
16
15
  # booster_current_pid = boost(**boost_params)(consuming_function)
17
16
  booster_current_pid.consume()
18
17
  # ConsumersManager.join_all_consumer_shedual_task_thread()
@@ -50,8 +49,7 @@ def run_consumer_with_multi_process(booster: Booster, process_num=1):
50
49
 
51
50
 
52
51
  def _multi_process_pub_params_list_in_new_process(queue_name, msgs: List[dict]):
53
- from funboost.core.booster import BoostersManager
54
- booster_current_pid = BoostersManager.get_or_create_booster_by_queue_name(queue_name)
52
+ booster_current_pid = lazy_impoter.BoostersManager.get_or_create_booster_by_queue_name(queue_name)
55
53
  publisher = booster_current_pid.publisher
56
54
  publisher.set_log_level(20) # 超高速发布,如果打印详细debug日志会卡死屏幕和严重降低代码速度。
57
55
  for msg in msgs:
@@ -0,0 +1,19 @@
1
+ import functools
2
+
3
+ from nb_log import CompatibleLogger
4
+ from funboost.core.current_task import get_current_taskid
5
+
6
+
7
+ class TaskIdLogger(CompatibleLogger):
8
+ """
9
+ 如果你要使用带taskid的日志模板,一定要使用
10
+ LogManager('namexx',logger_cls=TaskIdLogger).get_logger_and_add_handlers(....)
11
+ 的方式来创建logger, 就是需要指定logger_cls=TaskIdLogger ,否则的话你需要在打印日志时候 手动传递extra logger.info(msg,extra={'task_id':task_idxxx})
12
+ """
13
+ def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False):
14
+ extra = extra or {}
15
+ if 'task_id' not in extra:
16
+ extra['task_id'] = get_current_taskid()
17
+ if 'sys_getframe_n' not in extra:
18
+ extra['sys_getframe_n'] = 3
19
+ super()._log(level, msg, args, exc_info, extra, stack_info)
@@ -5,6 +5,7 @@ import pytz
5
5
  from funboost.constant import BrokerEnum, ConcurrentModeEnum
6
6
  from funboost.core.func_params_model import FunctionResultStatusPersistanceConfig
7
7
  from funboost.utils.simple_data_class import DataClassBase
8
+ from nb_log import nb_log_config_default
8
9
 
9
10
  '''
10
11
  funboost_config.py 文件是第一次运行框架自动生成到你的项目根目录的,不需要用由户手动创建。
@@ -96,7 +97,11 @@ class BrokerConnConfig(DataClassBase):
96
97
 
97
98
  class FunboostCommonConfig(DataClassBase):
98
99
  # nb_log包的第几个日志模板,内置了7个模板,可以在你当前项目根目录下的nb_log_config.py文件扩展模板。
99
- NB_LOG_FORMATER_INDEX_FOR_CONSUMER_AND_PUBLISHER = 11 # 7是简短的不可跳转,5是可点击跳转的,11是可显示ip 进程 线程的模板。
100
+ # NB_LOG_FORMATER_INDEX_FOR_CONSUMER_AND_PUBLISHER = 11 # 7是简短的不可跳转,5是可点击跳转的,11是可显示ip 进程 线程的模板,也可以亲自设置日志模板不传递数字。
101
+ NB_LOG_FORMATER_INDEX_FOR_CONSUMER_AND_PUBLISHER = logging.Formatter(
102
+ f'%(asctime)s-({nb_log_config_default.computer_ip},{nb_log_config_default.computer_name})-[p%(process)d_t%(thread)d] - %(name)s - "%(filename)s:%(lineno)d" - %(funcName)s - %(levelname)s - %(task_id)s - %(message)s',
103
+ "%Y-%m-%d %H:%M:%S",) # 这个是带task_id的日志模板,日志可以显示task_id,方便用户串联起来排查某一个人物消息的所有日志.
104
+
100
105
  TIMEZONE = 'Asia/Shanghai' # 时区
101
106
 
102
107
  # 以下配置是修改funboost的一些命名空间和启动时候的日志级别,新手不熟练就别去屏蔽日志了
@@ -26,6 +26,7 @@ from pikav1.exceptions import AMQPError as PikaAMQPError
26
26
  # from nb_log import LoggerLevelSetterMixin, LoggerMixin
27
27
  from funboost.core.loggers import LoggerLevelSetterMixin, FunboostFileLoggerMixin, get_logger
28
28
  from funboost.core.msg_result_getter import AsyncResult, AioAsyncResult
29
+ from funboost.core.task_id_logger import TaskIdLogger
29
30
  from funboost.utils import decorators, time_util
30
31
  from funboost.funboost_config_deafult import BrokerConnConfig, FunboostCommonConfig
31
32
 
@@ -158,13 +159,13 @@ class AbstractPublisher(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
158
159
  logger_prefix = self.publisher_params.logger_prefix
159
160
  if logger_prefix != '':
160
161
  logger_prefix += '--'
161
- logger_name = f'funboost.{logger_prefix}{self.__class__.__name__}--{self.queue_name}'
162
- log_filename = self.publisher_params.log_filename or f'funboost.{self.queue_name}.log'
163
- self.logger = get_logger(logger_name,
164
- log_level_int=self.publisher_params.log_level,
165
- log_filename=log_filename if self.publisher_params.create_logger_file else None,
166
- error_log_filename=nb_log.generate_error_file_name(log_filename),
167
- formatter_template=FunboostCommonConfig.NB_LOG_FORMATER_INDEX_FOR_CONSUMER_AND_PUBLISHER, )
162
+ self.logger_name = self.publisher_params.logger_name or f'funboost.{logger_prefix}{self.__class__.__name__}--{self.queue_name}'
163
+ self.log_filename = self.publisher_params.log_filename or f'funboost.{self.queue_name}.log'
164
+ self.logger = nb_log.LogManager(self.logger_name, logger_cls=TaskIdLogger).get_logger_and_add_handlers(
165
+ log_level_int=self.publisher_params.log_level,
166
+ log_filename=self.log_filename if self.publisher_params.create_logger_file else None,
167
+ error_log_filename=nb_log.generate_error_file_name(self.log_filename),
168
+ formatter_template=FunboostCommonConfig.NB_LOG_FORMATER_INDEX_FOR_CONSUMER_AND_PUBLISHER, )
168
169
 
169
170
  def _init_count(self):
170
171
  self._current_time = time.time()
@@ -213,7 +214,7 @@ class AbstractPublisher(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
213
214
  decorators.handle_exception(retry_times=10, is_throw_error=True, time_sleep=0.1)(
214
215
  self.concrete_realization_of_publish)(json.dumps(msg, ensure_ascii=False))
215
216
 
216
- self.logger.debug(f'向{self._queue_name} 队列,推送消息 耗时{round(time.time() - t_start, 4)}秒 {msg_function_kw}') # 显示msg太长了。
217
+ self.logger.debug(f'向{self._queue_name} 队列,推送消息 耗时{round(time.time() - t_start, 4)}秒 {msg_function_kw}', extra={'task_id': task_id}) # 显示msg太长了。
217
218
  with self._lock_for_count:
218
219
  self.count_per_minute += 1
219
220
  self.publish_msg_num_total += 1
@@ -223,9 +224,9 @@ class AbstractPublisher(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
223
224
  self._init_count()
224
225
  return AsyncResult(task_id)
225
226
 
226
- def send_msg(self,msg:typing.Union[dict,str]):
227
+ def send_msg(self, msg: typing.Union[dict, str]):
227
228
  """直接发送任意消息内容到消息队列,不生成辅助参数,无视函数入参名字,不校验入参个数和键名"""
228
- if isinstance(msg,dict):
229
+ if isinstance(msg, dict):
229
230
  msg = json.dumps(msg, ensure_ascii=False)
230
231
  decorators.handle_exception(retry_times=10, is_throw_error=True, time_sleep=0.1)(
231
232
  self.concrete_realization_of_publish)(msg)
@@ -9,12 +9,14 @@
9
9
  '''
10
10
 
11
11
  import copy
12
+ import functools
12
13
  import inspect
13
14
  import threading
14
15
  import time
15
16
  import types
16
17
  import sys
17
18
 
19
+
18
20
  from .exceptions import FunctionTimedOut
19
21
  from .StoppableThread import StoppableThread
20
22
 
@@ -27,6 +29,8 @@ from functools import wraps
27
29
  __all__ = ('func_timeout', 'func_set_timeout')
28
30
 
29
31
 
32
+
33
+
30
34
  def func_timeout(timeout, func, args=(), kwargs=None):
31
35
  '''
32
36
  func_timeout - Runs the given function for up to #timeout# seconds.
@@ -60,7 +64,11 @@ def func_timeout(timeout, func, args=(), kwargs=None):
60
64
  exception = []
61
65
  isStopped = False
62
66
 
63
- def funcwrap(args2, kwargs2):
67
+ from funboost.core.current_task import thread_current_task
68
+
69
+ def funcwrap(args2, kwargs2,_fct_local_data_dict):
70
+ fct = thread_current_task
71
+ fct._fct_local_data.__dict__.update(_fct_local_data_dict) # 把funboost的消费线程上下文需要传递到超时线程上下文里面来.
64
72
  try:
65
73
  ret.append( func(*args2, **kwargs2) )
66
74
  except FunctionTimedOut:
@@ -76,7 +84,9 @@ def func_timeout(timeout, func, args=(), kwargs=None):
76
84
  e.__traceback__ = exc_info[2].tb_next
77
85
  exception.append( e )
78
86
 
79
- thread = StoppableThread(target=funcwrap, args=(args, kwargs))
87
+
88
+ # fct = funboost_current_task()
89
+ thread = StoppableThread(target=funcwrap, args=(args, kwargs,thread_current_task._fct_local_data.__dict__))
80
90
  thread.daemon = True
81
91
 
82
92
  thread.start()
@@ -1,12 +1,17 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # @Author : ydf
3
3
  # @Time : 2022/9/17 0017 15:26
4
+ import functools
4
5
  import os
5
6
  import pymongo
6
- from funboost.funboost_config_deafult import BrokerConnConfig
7
7
  from funboost.utils import decorators
8
8
 
9
9
 
10
+ @functools.lru_cache()
11
+ def _get_mongo_url():
12
+ from funboost.funboost_config_deafult import BrokerConnConfig
13
+ return BrokerConnConfig.MONGO_CONNECT_URL
14
+
10
15
  class MongoMixin0000:
11
16
  """
12
17
  mixin类被继承,也可以直接实例化。
@@ -20,7 +25,7 @@ class MongoMixin0000:
20
25
  @property
21
26
  @decorators.cached_method_result
22
27
  def mongo_client(self):
23
- return pymongo.MongoClient(BrokerConnConfig.MONGO_CONNECT_URL, connect=False) # connect等于False原因见注释
28
+ return pymongo.MongoClient(_get_mongo_url(), connect=False) # connect等于False原因见注释
24
29
 
25
30
  @property
26
31
  @decorators.cached_method_result
@@ -46,7 +51,7 @@ class MongoMixin:
46
51
  pid = os.getpid()
47
52
  key = pid
48
53
  if key not in MongoMixin.processid__client_map:
49
- MongoMixin.processid__client_map[key] = pymongo.MongoClient(BrokerConnConfig.MONGO_CONNECT_URL,
54
+ MongoMixin.processid__client_map[key] = pymongo.MongoClient(_get_mongo_url(),
50
55
  connect=False, maxIdleTimeMS=60 * 1000, minPoolSize=3, maxPoolSize=20)
51
56
  return MongoMixin.processid__client_map[key]
52
57
 
@@ -1,13 +1,18 @@
1
1
  # coding=utf-8
2
+ import functools
2
3
  import typing
3
4
  import datetime
4
5
  import time
5
6
  import re
6
7
  import pytz
7
- from funboost.funboost_config_deafult import BrokerConnConfig,FunboostCommonConfig
8
+
8
9
 
9
10
  from funboost.utils import nb_print
10
11
 
12
+ @functools.lru_cache()
13
+ def _get_funboost_timezone():
14
+ from funboost.funboost_config_deafult import FunboostCommonConfig
15
+ return FunboostCommonConfig.TIMEZONE
11
16
 
12
17
  def build_defualt_date():
13
18
  """
@@ -78,11 +83,11 @@ class DatetimeConverter:
78
83
  elif isinstance(datetimex, (int, float)):
79
84
  if datetimex < 1:
80
85
  datetimex += 86400
81
- self.datetime_obj = datetime.datetime.fromtimestamp(datetimex, tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)) # 时间戳0在windows会出错。
86
+ self.datetime_obj = datetime.datetime.fromtimestamp(datetimex, tz=pytz.timezone(_get_funboost_timezone())) # 时间戳0在windows会出错。
82
87
  elif isinstance(datetimex, datetime.datetime):
83
88
  self.datetime_obj = datetimex
84
89
  elif datetimex is None:
85
- self.datetime_obj = datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE))
90
+ self.datetime_obj = datetime.datetime.now(tz=pytz.timezone(_get_funboost_timezone()))
86
91
  else:
87
92
  raise ValueError('实例化时候的传参不符合规定')
88
93
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 42.9
3
+ Version: 43.1
4
4
  Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
5
5
  Home-page: https://github.com/ydf0509/funboost
6
6
  Author: bfzs
@@ -100,9 +100,11 @@ funboost/core/function_result_status_config.py
100
100
  funboost/core/function_result_status_saver.py
101
101
  funboost/core/helper_funs.py
102
102
  funboost/core/kill_remote_task.py
103
+ funboost/core/lazy_impoter.py
103
104
  funboost/core/loggers.py
104
105
  funboost/core/msg_result_getter.py
105
106
  funboost/core/muliti_process_enhance.py
107
+ funboost/core/task_id_logger.py
106
108
  funboost/core/try_get_user_funboost_common_config.py
107
109
  funboost/core/cli/__init__.py
108
110
  funboost/core/cli/discovery_boosters.py
@@ -1,4 +1,4 @@
1
- nb_log>=12.2
1
+ nb_log>=12.4
2
2
  eventlet==0.33.3
3
3
  gevent==22.10.2
4
4
  pymongo==4.3.3
@@ -62,7 +62,7 @@ setup(
62
62
  'Topic :: Software Development :: Libraries'
63
63
  ],
64
64
  install_requires=[
65
- 'nb_log>=12.2',
65
+ 'nb_log>=12.4',
66
66
  'eventlet==0.33.3',
67
67
  'gevent==22.10.2',
68
68
  'pymongo==4.3.3', # 3.5.1 -> 4.0.2
File without changes
File without changes