python - 如何使用 Python 在远程服务器上启动异步服务器?
问题描述
我有一个运行 Linux 的虚拟服务器,有 8 个内核。32 GB RAM,另外还有 1 TB。它应该是一个开发环境。(测试和产品相同)这是我可以从 IT 获得的。服务器只能通过 putty 或直接 tcp/ip 端口通过所谓的跳转服务器访问(ssh 是必须的)。
我正在处理的应用程序通过多处理启动多个进程。在每个进程中都会启动一个异步事件循环,在某些情况下还会启动一个异步套接字服务器。基本上它是一个低级的数据流和处理应用程序(不幸的是还没有可用的 kafka 或类似技术)。实时应用程序永远运行,与用户没有或有限的交互(读取/处理/写入数据)。
我认为,IPython 是一个选项,但是 - 也许我错了 - 我认为它会根据客户端请求启动新内核,但我需要从主代码开始新进程而无需用户交互。如果是这样,这可以作为监视应用程序、从中收集数据、向主模块发送新用户命令的选项,但不确定如何远程运行进程和异步服务器。
我想了解如何在给定的环境中完成这些操作。我不知道从哪里开始,还有什么选择。而且我不正确理解 ipython,他们的页面对我来说还不是很明显。
请帮帮我!先感谢您!
解决方案
经过大量的研究和学习,我在我们的“沙盒”环境中找到了一个可能的解决方案。首先,我不得不将问题拆分为几个子问题:
- “远程”开发
- 并行化
- 调度和执行并行代码
- 这些“引擎”之间的数据共享
- 控制这些“引擎”
让我们详细看看:
- 远程开发意味着您想在笔记本电脑上编写代码,但代码必须在远程服务器上执行。简单的答案是 Jupyter Notebook(或等效解决方案),尽管它有几个折衷方案,也有其他解决方案可用,但部署和使用速度更快,并且依赖性、维护等最少。
- 并行化:在处理多处理时,iPython 内核遇到了一些挑战,因此必须并行运行的每个代码都将编写在单独的 Jupyter Notebook 中。在单个代码中,我仍然可以使用 eventloop 来获得异步行为
- 执行并行代码:我将使用几个选项:
- iPyParallel - 多处理的“解决方法”
- papermill - 使用命令行参数执行 JN(可选)
- 在 Jupyter Notebook 中使用 %%writefile 魔术命令 - 创建可导入文件
- os 任务调度程序,如 cron。
- 与事件循环异步
- 还没有选择:docker、多处理、多线程、云(aws、azure、google...)
- 数据共享:选择ZeroMQ,花时间学习,但比在纯套接字上编写所有内容更简单、更容易。有其他选择,但有额外的依赖,还有一些非常有用的好处(稍后会检查它们):RabbitMQ、Redis 消息代理等。首选 ZMQ 的原因:快速、简单、优雅,而且只是一个库。(已知风险:我们的 IT 会更喜欢 RabbitMQ,但这个问题稍后会出现 :-))
- 控制引擎:现在这个答案很明显:单独的 python 代码(可以作为 JN 代码进行测试,但很容易变成纯 .py 并安排它)。这个可以通过 ZMQ 套接字与其他模块进行通信:健康检查、发送新参数、命令等......
推荐阅读
- prolog - Prolog Logic 与相邻房间
- python - 交错行 2D Numpy 数组
- java - 为什么我通过尝试用 java 解密 RSA 但用 php 加密来得到这个异常?
- java - 这段代码在做什么?我是新手,仍然对 Java 感到困惑
- javascript - 使用 jQuery 对包含组的表进行排序
- c - 这个问题的正确输出是什么?
- laravel - 是运行像 Laravel 调度程序这样的内部 cron 服务还是使用像 Easycron 这样的外部服务更好
- powershell - Outlook 和 Powershell
- python-3.x - 箱线图matplotlib的胡须大小
- java - 具有不同文件名的 springboot 配置外部化