2013-12-16 21 views
0

我的应用程序反复轮询API并生成进程来解析这些调用产生的新数据,并根据这些数据有条件地发出API请求。这个周转时间的速度至关重要。温暖,可重用的Python进程池

一个很大的瓶颈似乎与设置实际产生的进程本身有关 - 一些模块导入和正常实例化代码,在亚马逊中级设置上需要0.05秒的时间。看起来有一批已经完成那些导入/初始化代码的进程会有所帮助††,正在等待处理结果。在Python中创建/使用流程池(10-20?)进行热/可重用/极其轻量级流程的最佳方法是什么?

† - 是的,我知道在问题中抛出更好的硬件会有帮助,我也会这样做。

†† - 是的,我知道这样不太会有帮助,而我的工作使代码流线型和最小尽可能

+1

你让它听起来很粗糙。 –

+1

我其实很喜欢这个quetion的标题! – ixe013

回答

1

嗯,你在这里学习曲线,但multiprocessing.Pool()会创建您指定的任意数量的流程的池。使用initializer=参数来指定每个进程在开始时运行的函数。然后,您可以使用几种方法将工作项目提交到池中的流程 - 读取文档,使用它并在遇到困难时提问。

一个警告:“极轻的过程”是不可能的。根据定义,过程是“沉重的”。 “多重”取决于您的操作系统,并且与您使用的编程语言几乎无关。如果你正在寻找轻量级,你正在寻找线程。

+0

感谢您的回答。也许而不是“非常轻量级”,我应该说“非常短命”。但在这两种情况下,一切都是相对的。 –

+0

但是你根本不想要“短命”,对吧?它确实听起来像你想要创建每个过程一次,并让它*坚持*接受新工作,因为新工作变得可用。 “这些进口/ init代码已经完成,等待处理结果的一批进程”正是“Pool()”会为你做的事情。如果这不是你想要的,你应该编辑这个问题;-) –

+0

正确 - 他们正在做的工作的持续时间是短暂的,但流程应该能够重复执行并存在,直到完成跟他们。你理解得很完美。 –