Python作业占用更多时间和更多(增加的)内存
这是一个在概念方面寻求帮助的问题。我无法进一步进行调试,需要对调试的方向提出建议 我有一个带有一些cython模块的示例python项目,它构建为一个c二进制文件。它使用多处理和套接字调用 比方说,我运行的作业需要t时间才能完成。 然后, 出于某些原因,我不得不使用下面这样的大集合Python作业占用更多时间和更多(增加的)内存,python,c,unix,operating-system,Python,C,Unix,Operating System,这是一个在概念方面寻求帮助的问题。我无法进一步进行调试,需要对调试的方向提出建议 我有一个带有一些cython模块的示例python项目,它构建为一个c二进制文件。它使用多处理和套接字调用 比方说,我运行的作业需要t时间才能完成。 然后, 出于某些原因,我不得不使用下面这样的大集合 big_set = set(xrange(1, 300*1000000)) time it takes to build this set is ~21sec on average. I only defi
big_set = set(xrange(1, 300*1000000))
time it takes to build this set is ~21sec on average. I only define this set and no other change.
我打算用这台电视机做一些工作。当我这样做的时候,时间增加了1小时。然后,我删除了在集合上所做的任何工作,它的定义与上面完全相同。这意味着它只会占用一些内存,而不会对其执行其他操作。即使这样,时间也增加了1小时
因此,问题是,仅设置贴花的作业的最终执行时间平均会增加t+1小时
我不能添加精简的代码,因为这只能在我的项目中重复
我使用32gb内存的系统,无论是否设置,我都有足够的内存。
我用set在作业上运行了cython评测,结果表明2个API的时间增加了
mem with set-
total used free shared buffers cache available
Mem: 32779824 8277752 22760980 54064 0 1741092 23908684
Swap: 4194300 122584 4071716
Total: 36974124 8400336 26832696
mem without set -
total used free shared buffers cache available
Mem: 32779824 570600 30468016 54064 0 1741208 31615532
Swap: 4194300 122584 4071716
Total: 36974124 693184 34539732
profiling -
With set
ncalls tottime percall cumtime percall filename:lineno(function)
96306417/96306404 3098.288 0.000 3134.396 0.000 parseargs.py:334(chose)
523033 2274.531 0.004 2671.672 0.005 a.pyx:1304(_xdrReadDirRes)
935516 689.629 0.001 723.351 0.001 network.pyx:182(sendrecv_select)
3770 516.163 0.137 1029.976 0.273 r.pyx:3256(count)
542886/537769 319.678 0.001 4101.424 0.008 s.pyx:1568(run)
without set -
ncalls tottime percall cumtime percall filename:lineno(function)
96305747/96305734 592.693 0.000 628.976 0.000 parseargs.py:334(chose)
857882 582.929 0.001 614.667 0.001 network.pyx:182(sendrecv_select)
3770 508.545 0.135 1005.346 0.267 r.pyx:3256(count)
283081396 287.280 0.000 287.282 0.000 basics.py:362(got)
540924/536471 271.824 0.001 1521.400 0.003 s.pyx:1568(run)
94726937 154.022 0.000 354.984 0.000 a.pyx:645(__cinit__)
565218820 146.870 0.000 146.870 0.000 r.pyx:470(got)
94206094 104.709 0.000 403.491 0.000 a.pyx:1262(_xdr)
523033 97.584 0.000 502.974 0.001 a.pyx:1304(_xdrReadDirRes)
Time increase majorly in - parseargs.py:334(chose) & a.pyx:1304(_xdrReadDirRes)
def chose(self, opt):
if isinstance(opt, str):
return opt in [oi.name for oi in self.chosen]
elif isinstance(opt, OptionInfo):
return opt.synonym or opt in [oi for oi in self.chosen]
elif isinstance(opt, Iterable):
return sum([1 for o in opt if self.chose(o)])
_xdrReadDirRes is a method that does encode and decode from network to host & host to network.
我不明白为什么这两个API会增加时间
当我使用更多内存时,为什么执行时间会增加?因为我有足够的内存,我相信分页/交换也不会发生。那么,为什么呢?
对引擎盖下可能发生的事情有什么建议吗?
我需要一些指针来进一步调试。作业的输入在使用或不使用setWell时是相同的,如果不需要,则不包括该集合。您没有共享任何代码,因此我们不知道您正在使用该集做什么。我们该怎么办?猜测看起来你正在用这个集合做一些事情,因为它需要一个小时,不管它是什么。我已经添加了一个语句-我只定义这个集合,没有其他更改。不过,为了清晰起见,增加了更多细节。在这里生成一个。我建议你试试。如果集合被定义为局部变量,并且在循环或热点中多次构造,那么显然这会影响性能。但是,我们看不到您的代码,因此我们别无选择,只能猜测。