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