Python 最合适的节点服务器通信设计
我努力设计我项目的一部分。 其思想是,N个节点(每个节点有一个摄像头)将连续地向服务器发送帧以进行对象检测,然后服务器将向每个节点重新发送带有一些信息的响应 目标是尽可能独立地处理每个节点,并能够同时接收下一帧和处理上一帧 在Python中,并行运行的线程不在选项中,我正在考虑几种方法(假设我有一个能够并行处理N*2个线程的CPU: 1) 服务器将为每个节点生成两个进程(相互通信)(一个用于接收帧,一个用于对象检测)。(这些进程将独立于主进程运行) 2) 服务器将是单线程和异步的。每个接收到的帧都将提交给进程池进行检测 3) 服务器将为每个节点生成一个线程(一个线程将处理从一个节点接收帧)。每个接收到的帧都将被提交到一个进程池中进行对象检测 4) 服务器将为每个节点生成一个线程,并在该线程中生成两个单独的线程,一个用于接收,一个用于对象检测Python 最合适的节点服务器通信设计,python,oop,asynchronous,concurrency,parallel-processing,Python,Oop,Asynchronous,Concurrency,Parallel Processing,我努力设计我项目的一部分。 其思想是,N个节点(每个节点有一个摄像头)将连续地向服务器发送帧以进行对象检测,然后服务器将向每个节点重新发送带有一些信息的响应 目标是尽可能独立地处理每个节点,并能够同时接收下一帧和处理上一帧 在Python中,并行运行的线程不在选项中,我正在考虑几种方法(假设我有一个能够并行处理N*2个线程的CPU: 1) 服务器将为每个节点生成两个进程(相互通信)(一个用于接收帧,一个用于对象检测)。(这些进程将独立于主进程运行) 2) 服务器将是单线程和异步的。每个接收到的帧
哪种方法似乎最有意义?你能提出一些不同的建议吗?我喜欢建筑类的问题,如果我必须做这个项目,我会怎么做。
工作流:
-RESTAPI
-Redis队列(RQ)
-数据库服务器
使用此体系结构,您可以轻松地将轻量级结果立即返回给客户机,并使所有作业处于处理状态。RESTful体系结构是一种广泛使用的体系结构,但对于耗时的作业,我们使用队列处理器,客户机将向我们发出请求,以检查发布到服务器的任何作业的状态。如果你需要,我可以画包括更多细节的架构
简而言之:如果您有客户机-服务器体系结构,则使用REST API进行通信,并在内存队列存储中发布每个请求,前提是客户机发布的请求是一个耗时的过程,并且需要执行多步作业。使用此体系结构,您可以发布任意数量的作业以及多个工人,负载平衡器以提高性能。查看您详尽的答案,我很容易不同意您喜欢体系结构问题。非常感谢,我需要阅读更多关于Redis(到目前为止,我认为它只是一个典型的数据库)和RESTAPI的信息。我目前的理解如下:通过这种方法,我可能不需要在每个节点和服务器之间建立开放式连接,但每个节点可能会提交请求,然后询问结果或作业状态。我主要担心的是,提交作业后,节点可能会重复向服务器发送调用(有一段等待时间(T))介于两者之间),直到它响应任务完成,但我实际上希望服务器尽快重新发送响应,这就是为什么我仍然认为某种异步方法在这种情况下可能更好。(因为如果作业花费了(T+1)时间,那么节点可能会在(T)时间后开始接收它,因为(T)之后它还没有准备好)无需,服务器可以将所有作业放入队列中,逐个处理,并在数据库中更新作业的状态和结果。如果要将通知推送到节点,请使用web套接字或推送器。