Gradio 月活用户突破 100 万!
阅读更多Gradio 月活用户突破 100 万!
阅读更多每个 Gradio 应用都内置了一个排队系统,可以扩展到数千并发用户。由于您的许多事件监听器可能涉及繁重的处理,Gradio 会自动创建一个队列来处理后端中的每个事件监听器。您应用中的每个事件监听器都自动拥有一个队列来处理传入事件。
默认情况下,每个事件监听器都有自己的队列,每次处理一个请求。这可以通过两个参数进行配置
concurrency_limit
:此参数设置事件监听器的最大并发执行数。默认情况下,限制为 1,除非在 Blocks.queue()
中另行配置。您也可以将其设置为 None
表示无限制(即,并发执行数不受限制)。例如import gradio as gr
with gr.Blocks() as demo:
prompt = gr.Textbox()
image = gr.Image()
generate_btn = gr.Button("Generate Image")
generate_btn.click(image_gen, prompt, image, concurrency_limit=5)
在上面的代码中,对于此事件监听器,最多可以同时处理 5 个请求。额外的请求将被排队,直到有空闲槽位。
如果您想使用共享队列管理多个事件监听器,可以使用 concurrency_id
参数
concurrency_id
:此参数允许事件监听器通过分配相同的 ID 来共享队列。例如,如果您的设置只有 2 个 GPU,但多个函数需要 GPU 访问,您可以为所有这些函数创建一个共享队列。以下是如何实现的方法import gradio as gr
with gr.Blocks() as demo:
prompt = gr.Textbox()
image = gr.Image()
generate_btn_1 = gr.Button("Generate Image via model 1")
generate_btn_2 = gr.Button("Generate Image via model 2")
generate_btn_3 = gr.Button("Generate Image via model 3")
generate_btn_1.click(image_gen_1, prompt, image, concurrency_limit=2, concurrency_id="gpu_queue")
generate_btn_2.click(image_gen_2, prompt, image, concurrency_id="gpu_queue")
generate_btn_3.click(image_gen_3, prompt, image, concurrency_id="gpu_queue")
在此示例中,所有三个事件监听器共享一个由 "gpu_queue"
标识的队列。该队列一次最多可以处理 2 个并发请求,如 concurrency_limit
所定义。
concurrency_limit=None
。如果您的函数正在调用例如处理自身请求速率限制的外部 API,这将非常有用。Blocks.queue()
中的 default_concurrency_limit
参数全局设置所有队列的默认并发限制。这些配置使您可以轻松管理 Gradio 应用的排队行为。