我努力设计项目的一部分。 这个想法是,N个节点(每个节点带有一个摄像机)将不断向服务器发送帧以进行对象检测,然后服务器将向每个节点重新发送一些信息。
目标是可能独立处理每个节点,并能够接收下一帧并同时处理前一帧。
就像在Python中一样,不选择并行运行线程,我正在考虑几种方法(假设我有一个能够并行处理N * 2个线程的CPU:
1)服务器将为每个节点生成两个进程(相互通信)(一个用于接收帧,一个用于对象检测)。 (那些进程将独立于主进程运行)
2)服务器将是单线程且异步的。每个接收到的帧都将提交给进程池进行检测。
3)服务器将为每个节点生成一个线程(一个线程将处理从一个节点接收帧)。每个接收到的帧都将提交到进程池以进行对象检测。
4)服务器将为每个节点生成一个线程,并在该线程中生成两个单独的线程,一个用于接收,一个用于对象检测
哪种方法似乎最有意义?您会提出一些不同的建议吗?
答案 0 :(得分:1)
我喜欢建筑方面的问题,如果需要执行此项目,我该怎么办。:
工作流程:
您需要在服务器上创建REST API接口,以从节点发布作业并将该请求保存到DB,并基于该请求创建作业,并将其推送到Redis队列。工作人员将自动从redis队列中取出作业,并根据处理结果更新数据库记录。
您需要在服务器端进行以下操作:
-REST API
-Redis队列(RQ)Link
-数据库服务器
使用此体系结构,您可以轻松地将轻量级结果立即返回给客户端,并使所有作业都在处理中。 RESTful体系结构是一种广泛使用的体系结构,但是对于耗时的工作,我们使用队列处理器,客户端将向我们发出请求,以检查发布到服务器的任何工作的状态。如果需要,我可以绘制包含更多细节的体系结构。
简而言之::如果客户端服务器架构具有客户端服务器体系结构,则使用REST API进行通信并在内存队列存储中发布每个请求,如果客户端发布的请求是耗时的过程并且具有多个步骤工作要做。使用这种架构,您可以发布任意数量的作业以及多个工作程序,负载平衡器以提高性能。