如何使用 Python 在远程服务器上启动异步服务器?

How to start asyncio server on remote server with Python?

我有一个可用的虚拟服务器 运行s Linux,有 8 个核心。 32 GB RAM,另外还有 1 TB。它应该是一个开发环境。 (测试和生产相同)这就是我可以从 IT 那里得到的。服务器只能通过 putty 或直接 tcp/ip 端口(必须使用 ssh)通过所谓的跳转服务器访问。

我正在处理的应用程序通过多处理启动多个进程。在每个进程中,都会启动一个 asyncio 事件循环,在某些情况下还会启动一个 asyncio 套接字服务器。基本上它是一个低级数据流和处理应用程序(不幸的是,还没有可用的 kafka 或类似技术)。实时应用程序 运行 永远不会与用户交互或交互有限(reads/processes/writes 数据)。

我假设,IPython 是一个选项,但是 - 也许我错了 - 我认为它会根据客户端请求启动新内核,但我需要从主代码启动新进程 w/o 用户交互。如果是这样,这可以作为监视应用程序、从中收集数据、向主模块发送新用户命令的选项,但不确定如何 运行 远程处理和异步服务器。

我想了解如何在给定环境中完成这些操作。我不知道从哪里开始,有什么选择。我还没有完全理解 ipython,他们的页面对我来说还不是很明显。

请帮帮我!提前致谢!

经过大量的研究和学习,我在我们的“沙盒”环境中找到了一个 possible 解决方案。首先,我不得不将问题拆分成几个子问题:

  • “远程”开发
  • 并行化
  • 调度和执行并行代码
  • 这些“引擎”之间的数据共享
  • 控制这些“引擎”

详细看一下:

  • 远程开发意味着您想在笔记本电脑上编写代码,但代码必须在远程服务器上执行。简单的答案是 Jupyter Notebook(或等效解决方案),虽然它有一些权衡取舍,但也有其他解决方案可用,但部署和使用速度更快,依赖性、维护等最少。
  • 并行化:在使用多处理时,iPython 内核遇到了一些挑战,因此每个必须 运行 并行的代码都将在单独的 Jupyter Notebook 中编写。在单个代码中,我仍然可以使用事件循环来获得异步行为
  • 执行并行代码:我将使用几个选项:
    • iPyParallel - 多处理的“解决方法”
    • papermill - 从命令行使用参数执行 JNs(可选)
    • 在 Jupyter Notebook 中使用 %%writefile 魔术命令 - 创建可导入文件
    • os 类似 cron 的任务调度器。
    • 与事件循环异步
    • 尚无选项:docker、多处理、多线程、云(aws、azure、google...)
  • 数据分享:选择ZeroMQ, took time to learn but was simpler and easier than writing everything on pure sockets. There are alternatives but come with extra dependency, and some very useful benefit (will check them later): RabbitMQ, Redis message broker等 喜欢ZMQ的原因:快速,简单,优雅,只是一个库。 (已知风险:我们的 IT 更喜欢 RabbitMQ,但这个问题稍后会出现 :-))
  • 控制引擎:现在这个答案很明显:单独的 python 代码(可以作为 JN 代码进行测试,但很容易变成纯 .py 并安排它)。这个可以通过 ZMQ 套接字与其他模块通信:健康检查、发送新参数、命令等....