首页 > 解决方案 > 如何在使用 Flask 网络服务器时在 Python 进程之间建立套接字连接(用于进程间通信)

问题描述

我对 Python 比较陌生,一直试图找出我在这里做错了什么。

我有一个 python 脚本,其唯一目的是控制一个硬件。此控制器脚本的主要功能在一个连续循环中运行,并且循环的每次迭代都可能向硬件发送消息。Listener该脚本还提供了一种通过多处理库的套接字类从外部源接收输入的机制。

在一个单独的 python 脚本(即在一个单独的进程中运行)中,我正在运行一个烧瓶服务器,它定义了用于接收消息并将它们转发到上述控制器进程的路由。我正在使用多处理库的Client套接字类来发送消息。

我遇到的问题是一旦我启动烧瓶服务器,我似乎无法与控制器脚本建立套接字连接。当我尝试这样做时,烧瓶进程挂起。

下面是说明我的设置的代码示例。注意每个脚本中线程的使用(也可能不正确):

控制器.py

class HardwareControllerThread(threading.Thread)
    def __init__(self):
        threading.Thread.__init__(self)

    def update(self, value):
      # Do something with `value` here

if __name__ == "__main__":
  thread = HardwareControllerThread()
  thread.start()

  address = ("localhost", 6000)
  listener = Listener(address)
  connection = listener.accept()

  while True:
    try:
      msg = connection.recv()

      if msg == "close":
        connection.close()
        thread.join()
      else:
        thread.update(msg)
    except EOFError:
      continue

  listener.close()

服务器.py

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route("/", methods=["POST"])
def update():
    thread = threading.Thread(target=sendMessage, args=("message to send",))
    thread.start()
    thread.join()
    return flask.Response(status=200)


def sendMessage(message):
    client = Client(("localhost", 6000))
    print("connected to client")  # never get to this line
    colorDriverClient.send(message)
    colorDriverClient.close()

app.run(host="0.0.0.0")

标签: python-3.xflaskpython-multiprocessingpython-sockets

解决方案


推荐阅读