Python作业占用更多时间和更多(增加的)内存

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

这是一个在概念方面寻求帮助的问题。我无法进一步进行调试,需要对调试的方向提出建议

我有一个带有一些cython模块的示例python项目,它构建为一个c二进制文件。它使用多处理和套接字调用

比方说,我运行的作业需要t时间才能完成。 然后, 出于某些原因,我不得不使用下面这样的大集合

    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时是相同的,如果不需要,则不包括该集合。您没有共享任何代码,因此我们不知道您正在使用该集做什么。我们该怎么办?猜测看起来你正在用这个集合做一些事情,因为它需要一个小时,不管它是什么。我已经添加了一个语句-我只定义这个集合,没有其他更改。不过,为了清晰起见,增加了更多细节。在这里生成一个。我建议你试试。如果集合被定义为局部变量,并且在循环或热点中多次构造,那么显然这会影响性能。但是,我们看不到您的代码,因此我们别无选择,只能猜测。