python-3.x - 如何在使用 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")
解决方案
推荐阅读
- php - Vanilla PHP api 只允许 POST 请求
- android - dagger.internal.codegen.ComponentProcessor 无法处理此类,因为并非所有依赖项都可以解决
- html - 为什么我的 CSS 动画会消耗这么多资源?
- r - 计算栅格相似度的 Jaccard 指数
- javascript - 如何在控制台中显示电源按钮的开/关值?
- bar-chart - 当 Flourish 中有负值时,如何制作比赛条形图?
- authentication - 通过示例使用 JWT 如何进行身份验证和授权
- python - 比较行值以从其他列获取值
- ibm-cloud - 使用 IBM Watson Assistant for WhatsApp 时出现问题,使用“类型:选项”从无到有出现“未定义”一词
- r - 使用网格搜索与 h2o 进行深度学习模型时出错