我正在使用Spotify的https://github.com/spotify/luigi模块来安排任务。在我的脚本中,我定义了几个luigi.Task - 其中大部分通过subprocess.Popen()调用Python脚本,并且属于一个主要是线性的依赖图。
我最后的两项任务是最大的。在每个调用的Python脚本中(再次通过子进程),作业在~8个CPU中并行化。简而言之,当我在命令行上运行每个脚本或通过iPython控制台中的subprocess.Popen运行时,脚本按原样并行化并完成给定时间X.但是,当通过luigi运行时,每个脚本都需要远远超过时间X,并且不会按照应有的方式进行并行化。我正在使用32核和~244GB RAM的EC2实例上做所有事情。
luigi有一个默认的--workers命令行参数。对于它的价值,我的每个有问题的任务都有自己的命令行参数,该参数指定要在其中运行的作业的数量;为清楚起见,我在luigi中定义了一个名为--njobs的新命令行参数,我将其传递给每个脚本。然后,将-workers设置为1(默认值)或2(使problematic_task_1和problematic_task_2同时运行),我仍然会遇到相同的减速。
思考,SA?