【发布时间】:2020-03-31 23:25:47
【问题描述】:
我正在运行一个需要很长时间才能完成的特定程序,然后我意识到我可能正在做一些完全愚蠢的事情。再加上程序没有充分利用我的 CPU 的这一事实,我在这里寻求帮助以优化代码的核心。
我对 Python 中的多处理不是很满意,所以这个网站上的所有答案都没有太大帮助。
我正在使用的具体代码是:
k=10000
for i in range(2,k):
n=i
people=[]
for i in range(1,n+1):
people.append(i) #create list of people, labelled with integers
while(len(people)>1): #the game ends when there is 0 or 1 people left
shoot=[]
for i in people:
choice=i
while(choice==i):
choice=random.choice(people) #i-th chooses a person to kill and can't choose himself
shoot.append(choice)
for i in shoot:
if(i in people):
people.remove(i) #remove killed people
问题在于people 数组可能是一个巨大的列表(k 是一个巨大的数字),并且在最坏的情况下操作的数量是 k 阶乘的数量级,这可能非常大。
我想使用您可能建议的任何优化,并且如果可能的话,我想知道如何在这里使用多处理。如果有帮助的话,我有 8 个虚拟核心。
感谢任何输入。
【问题讨论】:
-
你要的是每个i的拍摄清单?
-
对。这是主要内容。
-
您能解释一下您要做什么吗?更具体地说,while choice==i 的部分
-
基本上有一群人在玩一个游戏。每个人随机选择另一个人杀死。 choice==i while 循环阻止他们选择自己被杀死。然后删除选定的人并继续游戏,直到剩下 1 人或没有人。
-
我在代码中添加了一些 cmets 以帮助理解它。如果您还有其他问题,请告诉我。
标签: python python-3.x optimization python-multiprocessing