import time
from multiprocessing import Pool
testarr=[]
def initFunction(length=100000) :
for i in range(0,length):
print("*****"+str(i))
testarr.append({"value":str(i),"flag":0})
def checkForEvenAtIndex(index=0):
print(str(index))
if int(testarr[index]["value"])%2==0:
testarr[index]["flag"]=1
if __name__ == '__main__':
start = time.time()
#print(start)
cpu = 4
length =100000
initFunction(length)
with Pool(cpu) as pool:
print(pool.map(checkForEvenAtIndex,range(0,length)))
end = time.time()
print('Total time taken *****'+str(end - start))
Точная ошибка:
if int(testarr[index]["value"])%2==0:
~~~~~~~^^^^^^^
IndexError: list index out of range
"""
Похоже, мне не хватает знаний в Python. Я имею опыт работы с C++. Пожалуйста, помогите. Точный индекс на который всегда выдает ошибку 93750 (это может быть неправильно. но после печати это не удается)
--------Изменен код, чтобы включить Manager согласно комментариям -----
import multiprocessing
import time
from multiprocessing import Pool
from multiprocessing.managers import BaseManager
testarr=[]
class CustomManager(BaseManager):
# nothing
pass
def initFunction(arr,length=100000) :
for i in range(0,length):
print("*****"+str(i))
arr.append({"value":str(i),"flag":0})
def checkForEvenAtIndex(sharedarr,index=0):
print(str(index))
if int(sharedarr[index]["value"])%2==0:
sharedarr[index]["flag"]=1
if __name__ == '__main__':
start = time.time()
cpu = 4
length =100
processes = []
#print(start)
CustomManager.register('list',list)
with CustomManager() as manager:
sharedarr=manager.list()
initFunction(sharedarr,length)
for i in range(length):
p = multiprocessing.Process(target=checkForEvenAtIndex, args=(sharedarr,i))
processes.append(p)
for p in processes:
p.start()
for p in processes:
p.join()
end = time.time()
print('Total time taken *****'+str(end - start))
Новая ошибка:
line 18, in checkForEvenAtIndex
TypeError: 'AutoProxy
- ' object is not subscriptable
Подробнее здесь: https://stackoverflow.com/questions/792 ... ange-error
Мобильная версия