首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Twisted中生成长时间运行的进程

如何在Twisted中生成长时间运行的进程
EN

Stack Overflow用户
提问于 2011-08-27 12:49:26
回答 1查看 3.2K关注 0票数 0

前言

我正在编写一个web服务器,它允许用户访问一些用C编写的程序(我在这个C程序上使用Python包装器,它是PyCLIPS)。为了为很多用户服务,网络服务器必须启动大量的C程序副本,因为一个副本可以同时为很少的用户服务,大约有1-3个用户。此外,每个用户都应该只使用自己的拷贝,因此应该有大量的C程序副本。

这个C程序是一个http://clipsrules.sourceforge.net/,如果它能帮助理解的话.

因此,为了解决这个设计问题,我想编写一个Twisted TCP服务器,它就像一个长时间运行的进程池。每个长时间运行的进程都是一个小的Twisted TCP服务器,可以访问C程序的一个副本。

例如,用户要求池服务器为他保留一个长时间运行的进程,然后池服务器创建并运行一个开始监听某个端口的长时间运行的进程,然后池服务器将这个长进程的主机和端口返回给用户。现在,用户可以直接与这个长时间运行的进程通信.

问题

  1. 如何从池服务器启动这些长时间运行的进程?池服务器和每个长时间运行的进程都应该是单独的Twisted服务器。
  2. Twisted是实现这些目标的好选择吗?
  3. 也许还有其他方法来解决这个设计问题呢?

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-27 15:07:38

用Twisted做这个听起来很有道理。支持在Twisted中运行进程的低级API是reactor.spawnProcess。在工艺方法文档中给出了使用它的一些例子。

此API非常适合处理许多长期运行的进程,与Twisted中的所有I/O API一样,当与另一个事件源(如网络服务器用户可以用来请求启动新进程)组合时,它工作得很好。

reactor.spawnProcess更像是标准库子流程模块,而不是multiprocessing包。它为您提供了一种启动运行特定可执行文件的子进程的方法,该子进程具有特定的参数,等等。它不提供用于在另一个进程中运行特定Python函数的高级API。然而,构建这样的东西并不难(至少对于特定的情况是这样)。考虑这一办法:

代码语言:javascript
复制
from sys import executable
from os import environ

from twisted.internet import reactor

implementation = """\
from yourapp import somefunction
somefunction()
"""

reactor.spawnProcess(executable, [executable, "-c", implementation], env=environ)
reactor.run()

这只会启动一个新的Python解释器(无论您正在运行哪个解释器),并使用-c选项在命令行中指定一个程序以使其运行。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7214663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档