Обработка пула в Python приводит к ошибке индекса за пределами диапазонаPython

Программы на Python
Ответить
Anonymous
 Обработка пула в Python приводит к ошибке индекса за пределами диапазона

Сообщение Anonymous »

Я запускаю приведенный ниже простой код для доступа к глобальной переменной и манипулирования содержимым с помощью многократной обработки, но его индекс списка выходит за пределы диапазона, даже если индексированный элемент присутствует
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»