<small id='E6uEm'></small><noframes id='E6uEm'>

      1. <i id='E6uEm'><tr id='E6uEm'><dt id='E6uEm'><q id='E6uEm'><span id='E6uEm'><b id='E6uEm'><form id='E6uEm'><ins id='E6uEm'></ins><ul id='E6uEm'></ul><sub id='E6uEm'></sub></form><legend id='E6uEm'></legend><bdo id='E6uEm'><pre id='E6uEm'><center id='E6uEm'></center></pre></bdo></b><th id='E6uEm'></th></span></q></dt></tr></i><div id='E6uEm'><tfoot id='E6uEm'></tfoot><dl id='E6uEm'><fieldset id='E6uEm'></fieldset></dl></div>

      2. <tfoot id='E6uEm'></tfoot>
        <legend id='E6uEm'><style id='E6uEm'><dir id='E6uEm'><q id='E6uEm'></q></dir></style></legend>
          <bdo id='E6uEm'></bdo><ul id='E6uEm'></ul>

        Python-如何使用FastAPI和uvicorn.run而不阻塞线程?

        时间:2024-08-11
          <tbody id='lsggd'></tbody>
        • <legend id='lsggd'><style id='lsggd'><dir id='lsggd'><q id='lsggd'></q></dir></style></legend>
            <bdo id='lsggd'></bdo><ul id='lsggd'></ul>

                <i id='lsggd'><tr id='lsggd'><dt id='lsggd'><q id='lsggd'><span id='lsggd'><b id='lsggd'><form id='lsggd'><ins id='lsggd'></ins><ul id='lsggd'></ul><sub id='lsggd'></sub></form><legend id='lsggd'></legend><bdo id='lsggd'><pre id='lsggd'><center id='lsggd'></center></pre></bdo></b><th id='lsggd'></th></span></q></dt></tr></i><div id='lsggd'><tfoot id='lsggd'></tfoot><dl id='lsggd'><fieldset id='lsggd'></fieldset></dl></div>

                  <small id='lsggd'></small><noframes id='lsggd'>

                • <tfoot id='lsggd'></tfoot>

                  本文介绍了Python-如何使用FastAPI和uvicorn.run而不阻塞线程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在寻找将uvicorn.run()与FastAPI应用程序一起使用的可能性,但没有uvicorn.run()会阻塞线程。我已经尝试使用进程、子进程和线程,但都不起作用。 我的问题是,我想从另一个进程启动服务器,该进程应该在启动服务器之后继续执行其他任务。此外,我在从另一个进程以这种方式关闭服务器时遇到问题。

                  有人知道如何使用uvicorn.run()非阻塞,以及如何从另一个进程停止它吗?

                  问候语 LeukoClassic

                  推荐答案

                  根据Uvicorn文档,没有以编程方式停止服务器的方法。 相反,您只能通过按ctrl+c(正式)来停止服务器。

                  但我有一个技巧,可以使用multiprocessing标准库和以下三个简单函数以编程方式解决此问题:

                  • 用于运行服务器的Run函数。
                  • 启动新进程(启动服务器)的启动函数。
                  • 加入进程(停止服务器)的停止函数。
                  from multiprocessing import Process
                  import uvicorn
                  
                  # global process variable
                  proc = None
                  
                  
                  def run(): 
                      """
                      This function to run configured uvicorn server.
                      """
                      uvicorn.run(app=app, host=host, port=port)
                  
                  
                  def start():
                      """
                      This function to start a new process (start the server).
                      """
                      global proc
                      # create process instance and set the target to run function.
                      # use daemon mode to stop the process whenever the program stopped.
                      proc = Process(target=run, args=(), daemon=True)
                      proc.start()
                  
                  
                  def stop(): 
                      """
                      This function to join (stop) the process (stop the server).
                      """
                      global proc
                      # check if the process is not None
                      if proc: 
                          # join (stop) the process with a timeout setten to 0.25 seconds.
                          # using timeout (the optional arg) is too important in order to
                          # enforce the server to stop.
                          proc.join(0.25)
                  
                  


                  您可以

                  • 使用threading标准库,而不是使用multiprocessing标准库。

                  • 将这些函数重构为一个类。


                  用法示例:

                  from time import sleep
                  
                  if __name__ == "__main__":
                      # to start the server call start function.
                      start()
                      # run some codes ....
                      # to stop the server call stop function.
                      stop()
                  



                  您可以阅读有关以下内容的更多信息:

                  • Uvicorn服务器。
                  • multiprocessing标准库
                  • threading标准库。
                  • Concurrency了解有关python中的多处理和线程的更多信息。

                  这篇关于Python-如何使用FastAPI和uvicorn.run而不阻塞线程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:如何从多个进程递增共享计数器? 下一篇:如何解决使用Pool.map()进行多处理时的内存问题?

                  相关文章

                    <bdo id='J9TuV'></bdo><ul id='J9TuV'></ul>
                  <tfoot id='J9TuV'></tfoot>

                  1. <i id='J9TuV'><tr id='J9TuV'><dt id='J9TuV'><q id='J9TuV'><span id='J9TuV'><b id='J9TuV'><form id='J9TuV'><ins id='J9TuV'></ins><ul id='J9TuV'></ul><sub id='J9TuV'></sub></form><legend id='J9TuV'></legend><bdo id='J9TuV'><pre id='J9TuV'><center id='J9TuV'></center></pre></bdo></b><th id='J9TuV'></th></span></q></dt></tr></i><div id='J9TuV'><tfoot id='J9TuV'></tfoot><dl id='J9TuV'><fieldset id='J9TuV'></fieldset></dl></div>

                      <legend id='J9TuV'><style id='J9TuV'><dir id='J9TuV'><q id='J9TuV'></q></dir></style></legend>

                      <small id='J9TuV'></small><noframes id='J9TuV'>