Python gRPC GIL

def __init__(self, port=50055, model_status=0, model_output=""). bản thân. cổng = cổng tự. model_status = model_status tự. model_output = nhật ký model_output. info("Đang khởi tạo máy chủ GRPC", port=port) self. thread_pool = tương lai. ThreadPoolExecutor(max_workers=10) tự. máy chủ = grpc. máy chủ (tự. thread_pool) tự. django_initialized = Bản thân sai. django_apps = [] server_key = open(SERVER_KEY, "r"). read() server_cert = open(SERVER_CERT, "r"). read() server_ca = open(SERVER_CA, "r"). đọc () tự. thông tin đăng nhập = grpc. ssl_server_credentials( [(server_key, server_cert)], server_ca, False ) tự. bị trì hoãn_shutdown_timer = Không tự. exit_event = phân luồng. Sự kiện () tự. dịch vụ = []
# Bản quyền 2018 tác giả gRPC. ## Được cấp phép theo Giấy phép Apache, Phiên bản 2. 0 ("Giấy phép");# bạn không được sử dụng tệp này trừ khi tuân thủ Giấy phép. # Bạn có thể lấy một bản sao của Giấy phép tại## http. //www. apache. org/giấy phép/GIẤY ​​PHÉP-2. 0## Trừ khi luật hiện hành yêu cầu hoặc được đồng ý bằng văn bản, phần mềm# được phân phối theo Giấy phép được phân phối trên CƠ SỞ "NGUYÊN TRẠNG",# KHÔNG CÓ BẢO ĐẢM HAY ĐIỀU KIỆN DƯỚI BẤT KỲ HÌNH THỨC NÀO, rõ ràng hay ngụ ý. # Xem Giấy phép để biết các quyền quản lý ngôn ngữ cụ thể và # giới hạn theo Giấy phép. _AWAIT_THREADS_TIMEOUT_SECONDS = 5_TRUE_VALUES = ['yes', 'Yes', 'YES', 'true', 'True', 'TRUE', '1']# Cờ này cho phép hỗ trợ thử nghiệm trong gRPC Python cho các ứng dụng# sẽ fork() . Khi được bật, gRPC Python sẽ cố gắng # tạm dừng tất cả các chuỗi được tạo nội bộ của nó trước khi cuộc gọi tòa nhà fork tiến hành. ## Để điều này thành công, ứng dụng không được có nhiều luồng# lệnh gọi riêng của nó vào gRPC khi fork được gọi. Bất kỳ lệnh gọi lại nào từ gRPC# luồng do Python sinh ra vào mã người dùng (e. g. , lệnh gọi lại cho RPC không đồng bộ)# không được chặn và phải thực thi nhanh chóng. ## Cờ này không được hỗ trợ trên Windows. # Cờ này cũng không được hỗ trợ cho trình quản lý IO không phải bản địa. _GRPC_ENABLE_FORK_SUPPORT = ( hệ điều hành. môi trường. nhận ('GRPC_ENABLE_FORK_SUPPORT', '0'). Lower() trong _TRUE_VALUES)_fork_handler_failed = Falsecdef void __prefork() nogil. với gil. _fork_handler_failed toàn cầu _fork_handler_failed = Sai với _fork_state. fork_in_progress_condition. _fork_state. fork_in_progress = Đúng nếu không _fork_state. active_thread_count. await_zero_threads( _AWAIT_THREADS_TIMEOUT_SECONDS). _TIỀU PHU. lỗi ('Không thể tắt chuỗi gRPC Python trước ngã ba. ' 'Hành vi sau ngã ba sẽ không được xác định. ') _fork_handler_failed = Truecdef void __postfork_parent() nogil. với gil. với _fork_state. fork_in_progress_condition. _fork_state. fork_in_progress = Sai _fork_state. fork_in_progress_condition. notify_all() cdef void __postfork_child() nogil. với gil. cố gắng. nếu _fork_handler_failed. return # Chủ đề có thể đang giữ fork_in_progress_condition bên trong # block_if_fork_in_progress() khi fork xảy ra. Đặt lại khóa tại đây. _fork_state. fork_in_progress_condition = phân luồng. Điều kiện() # Một chuỗi trong return_from_user_request_generator() có thể giữ khóa này # khi ngã ba xảy ra. _fork_state. active_thread_count = _ActiveThreadCount() cho state_to_reset trong _fork_state. postfork_states_to_reset. trạng thái_to_reset. reset_postfork_child() _fork_state. postfork_states_to_reset = [] _fork_state. fork_epoch += 1 cho kênh trong _fork_state. kênh truyền hình. kênh truyền hình. _close_on_fork() với _fork_state. fork_in_progress_condition. _fork_state. fork_in_progress = Sai ngoại trừ. _TIỀU PHU. lỗi ('Thoát phần tử con do tăng ngoại lệ') _LOGGER. lỗi (hệ thống. exc_info()[0]) hệ điều hành. _exit(os. EX_USAGE) nếu grpc_is_initialized() > 0. với gil. _TIỀU PHU. lỗi ('Không thể tắt gRPC Core sau fork()') hệ điều hành. _exit(os. EX_USAGE)def fork_handlers_and_grpc_init(). grpc_init() nếu _GRPC_ENABLE_FORK_SUPPORT. với _fork_state. fork_handler_registered_lock. nếu không _fork_state. fork_handler_registered. pthread_atfork(&__prefork, &__postfork_parent, &__postfork_child) _fork_state. fork_handler_registered = Trueclass ForkManagedThread(đối tượng). def __init__(bản thân, mục tiêu, args=()). nếu _GRPC_ENABLE_FORK_SUPPORT. def quản lý_mục tiêu (* args). cố gắng. target(*args) cuối cùng. _fork_state. active_thread_count. tự giảm (). _thread = luồng. Chủ đề (đích=_run_with_context(managed_target), args=args) khác. bản thân. _thread = luồng. Chủ đề (mục tiêu = _run_with_context (mục tiêu), args = args) def setDaemon (self, daemonic). bản thân. _chủ đề. daemon = daemon def start(self). nếu _GRPC_ENABLE_FORK_SUPPORT. _fork_state. active_thread_count. tăng () tự. _chủ đề. bắt đầu () chắc chắn tham gia (tự). bản thân. _chủ đề. tham gia() def block_if_fork_in_progress(postfork_state_to_reset=None). nếu _GRPC_ENABLE_FORK_SUPPORT. với _fork_state. fork_in_progress_condition. nếu không _fork_state. fork_in_progress. trả lại nếu postfork_state_to_reset không phải là Không có. _fork_state. postfork_states_to_reset. nối thêm (postfork_state_to_reset) _fork_state. active_thread_count. giảm() _fork_state. fork_in_progress_condition. đợi () _fork_state. active_thread_count. gia tăng() def enter_user_request_generator(). nếu _GRPC_ENABLE_FORK_SUPPORT. _fork_state. active_thread_count. giảm() def return_from_user_request_generator(). nếu _GRPC_ENABLE_FORK_SUPPORT. _fork_state. active_thread_count. gia tăng() block_if_fork_in_progress()def get_fork_epoch(). trả lại _fork_state. fork_epochdef is_fork_support_enabled(). trả về _GRPC_ENABLE_FORK_SUPPORTdef fork_register_channel(kênh). nếu _GRPC_ENABLE_FORK_SUPPORT. _fork_state. kênh truyền hình. thêm(kênh)def fork_unregister_channel(kênh). nếu _GRPC_ENABLE_FORK_SUPPORT. _fork_state. kênh truyền hình. loại bỏ (kênh) lớp _ActiveThreadCount (đối tượng). def __init__(bản thân). bản thân. _num_active_threads = 0 tự. _điều kiện = phân luồng. Điều kiện () tăng def (tự). với bản thân. _điều kiện. bản thân. _num_active_threads += 1 giảm def(self). với bản thân. _điều kiện. bản thân. _num_active_threads -= 1 nếu tự. _num_active_threads == 0. bản thân. _điều kiện. notify_all() def await_zero_threads(self, timeout_secs). end_time = thời gian. time() + timeout_secs wait_time = timeout_secs với chính mình. _điều kiện. trong khi đúng. nếu tự. _num_active_threads > 0. bản thân. _điều kiện. đợi (wait_time) nếu tự. _num_active_threads == 0. trả về True # Số lượng chủ đề có thể đã tăng lên trước khi điều này lấy lại khóa # sau khi thông báo (). Chờ một lần nữa cho đến khi timeout_secs # trôi qua. wait_time = end_time - thời gian. time() nếu wait_time <= 0. trả lại lớp sai _ForkState(đối tượng). def __init__(bản thân). bản thân. fork_in_progress_condition = phân luồng. Điều kiện () tự. fork_in_progress = Tự sai. postfork_states_to_reset = [] tự. fork_handler_registered_lock = phân luồng. tự khóa (). fork_handler_registered = Tự sai. active_thread_count = _ActiveThreadCount() tự. fork_epoch = 0 tự. kênh = set()_fork_state = _ForkState()

Python gRPC có đa luồng không?

gRPC Python bao bọc lõi gRPC, sử dụng đa luồng để đạt hiệu suất và do đó không hỗ trợ fork().

Python gRPC là gì?

gRPC là khung gọi thủ tục từ xa (RPC) dựa trên HTTP/2 sử dụng bộ đệm giao thức ( protobuf ) làm khung tuần tự hóa dữ liệu cơ bản. It is an alternative to other language-neutral RPC frameworks such as Apache Thrift and Apache Arvo.

Máy khách và máy chủ gRPC là gì?

gRPC là khung RPC (Gọi thủ tục từ xa) mã nguồn mở mạnh mẽ được sử dụng để xây dựng các API nhanh và có thể mở rộng . Nó cho phép các ứng dụng máy khách và máy chủ giao tiếp một cách minh bạch và phát triển các hệ thống được kết nối. Nhiều công ty công nghệ hàng đầu đã áp dụng gRPC, chẳng hạn như Google, Netflix, Square, IBM, Cisco và Dropbox.