我认为用例节点的设计是因为它比启动时的python要少得多。但任何人都可以通过经验或基准来证实这一点。
我问的原因是我正在开展一个项目,我们每分钟都会启动很多,~20个python脚本。在这些流程中,我们正在使用数据库和网络进行大量的IO。这是一个地方节点会闪耀,所以我想探索可能在这里使用节点而不是python的好处。我知道我可以使用twisted来异步进行我的i / o,但我仍然需要每分钟启动这些进程。
编辑:
我知道启动这里描述的流程并不总是理想的。但在这个系统的架构中,这是理想的解决方案。这就是我考虑节点的原因。因为V8只是事件驱动的,所以以20 / min的速率调用“node myscript.js”并不重要。调用myscript.js就是这个事件。它只是不再在浏览器中了。 [编辑] 完全错误
开车上班并考虑到这一点后,我想我的问题应该是如何最好地对代码进行基准测试。从那里我可以分析两种设计。
更新
brandizzi向我展示了我的错误。做'node myscript.js'不是事件。最后,节点解释器确实需要比python更长的时间。但是,这个数额几乎没有。答案 0 :(得分:4)
你的问题太模糊恕我直言。无论如何,如果你想比较启动时间,为什么不只是time
?看一下它的一些例子(文件null.*
是空的,因为我们只试图测量启动时间):
$ i=0
$ time while [ $((i++)) -lt 1000 ] ; do python null.py ; done
real 0m55.777s
user 0m30.154s
sys 0m13.910s
$ i=0
$ time while [ $((i++)) -lt 1000 ] ; do node null.js ; done
real 1m37.618s
user 0m59.578s
sys 0m18.038s
这些初步结果表明节点启动速度稍慢。 (你的声明“调用myscript.js是事件”对我来说看起来并不正确,我的怀疑似乎确认。myscript.js
调用是一个事件 - 但用{{1}调用它加载整个过程来处理这个事件。)
说实话,然而,你问题的模糊性让我想知道你是不是在尝试premature optimization的某些时间 - 换句话说,看起来你甚至没有问题要解决了!当然,我可能是错的,但也许你现在不需要担心这个问题(即使因为我在一分钟内开始了每个翻译的一千个进程 - 如果你将在二十分之一的时候开始翻译可能没问题。)
无论如何,我的pythonista方面会提出一些建议。例如:流程需要多长时间才能完成?如果时间很短,您真的可以考虑使用Poll
of the multiprocessing
module,这将创建一个流程轮询来管理您的需求。即使您想通过某种shell脚本调用脚本(因为通过Bash脚本或node myscript.js
模块调用它们之间没有太大区别),我下注 Python具有生成字节码multiprocessing
文件的优点。 V8也这样做吗?