您现在的位置是:主页 > news > 成都网站排名提升/海口网站建设

成都网站排名提升/海口网站建设

admin2025/5/15 12:31:50news

简介成都网站排名提升,海口网站建设,公司体系建设的意义,飘云网络科技有限公司关于优化建议的重要内容是确保my_function()仅在子进程中被调用. deepcopy和del是无关紧要的 – 一旦你在一个进程中创建了五百万个不同的整数,同时把它们全部放在一起,那就是游戏结束了.即使您停止引用这些对象,Python也可以通过保留引用五百万个空整数对象大小的字段来释放它…

成都网站排名提升,海口网站建设,公司体系建设的意义,飘云网络科技有限公司关于优化建议的重要内容是确保my_function()仅在子进程中被调用. deepcopy和del是无关紧要的 – 一旦你在一个进程中创建了五百万个不同的整数,同时把它们全部放在一起,那就是游戏结束了.即使您停止引用这些对象,Python也可以通过保留引用五百万个空整数对象大小的字段来释放它…

关于优化建议的重要内容是确保my_function()仅在子进程中被调用. deepcopy和del是无关紧要的 – 一旦你在一个进程中创建了五百万个不同的整数,同时把它们全部放在一起,那就是游戏结束了.即使您停止引用这些对象,Python也可以通过保留引用五百万个空整数对象大小的字段来释放它们,这些字段在等待重新使用的下一个要创建五百万个整数的函数中.这是另一个答案中提到的免费列表,它购买了int和float的快速分配和释放.注意到这不是内存泄漏是公平的,因为内存绝对可用于进一步的分配.但是,在该过程结束之前,该内存将不会被返回到系统,也不会被重用于除了分配相同类型的数字之外的任何内容.

大多数程序没有这个问题,因为大多数程序不会创建病理学庞大的数字列表,释放它们,然后期望将其用于其他对象.使用numpy的程序也是安全的,因为numpy以紧密包装的本机格式存储其数组的数值数据.对于遵循此使用模式的程序,缓解问题的方法是首先不同时创建大量整数,至少不需要将内存返回系统的过程.目前还不清楚你有什么确切的用例,但真实世界的解决方案可能不仅仅需要一个“魔术装饰器”.

这是子进程的地方:如果在另一个进程中创建了数字列表,则与列表相关联的所有内存(包括但不限于int的存储)都被释放并通过简单的终止操作返回给系统子进程.当然,您必须设计您的程序,以便列表可以在子系统中创建和处理,而不需要传输所有这些数字.子进程可以接收创建数据集所需的信息,并且可以发送从处理列表中获得的信息.

为了说明原理,我们来升级您的示例,以便整个列表实际上需要存在 – 比如说我们是基准排序算法.我们希望创建一个庞大的整数列表,对其进行排序,并可靠地释放与列表相关联的内存,以便下一个基准测试可以为自己的需求分配内存,而不用担心内存不足.为了产生子进程和通信,这使用多处理模块:

# To run this,save it to a file that looks like a valid Python module,e.g.

# "foo.py" - multiprocessing requires being able to import the main module.

# Then run it with "python foo.py".

import multiprocessing,random,sys,os,time

def create_list(size):

# utility function for clarity - runs in subprocess

maxint = sys.maxint

randrange = random.randrange

return [randrange(maxint) for i in xrange(size)]

def run_test(state):

# this function is run in a separate process

size = state['list_size']

print 'creating a list with %d random elements - this can take a while... ' % size,sys.stdout.flush()

lst = create_list(size)

print 'done'

t0 = time.time()

lst.sort()

t1 = time.time()

state['time'] = t1 - t0

if __name__ == '__main__':

manager = multiprocessing.Manager()

state = manager.dict(list_size=5*1000*1000) # shared state

p = multiprocessing.Process(target=run_test,args=(state,))

p.start()

p.join()

print 'time to sort: %.3f' % state['time']

print 'my PID is %d,sleeping for a minute...' % os.getpid()

time.sleep(60)

# at this point you can inspect the running process to see that it

# does not consume excess memory

奖金回答

问题不清楚,很难提供奖金问题的答案. “自由列表概念”正是一个概念,一个实现策略,需要在普通Python分配器之上进行显式编码.大多数Python类型不使用该分配策略,例如它不用于使用类语句创建的类的实例.实行自由名单并不困难,但是如果没有充分的理由,它是相当先进的,很少进行的.如果一些扩展作者选择使用一种类型的免费列表,则可以预期他们知道免费列表提供的权衡 – 以额外的空间为代价获得超快的分配/释放(对于自由列表上的对象和自由列表本身),并且无法将内存重用于其他内容.