2015-02-14 3 views
0

Когда я выполнить эту программу, я получаю пустой список:Python потерять список объектов

Я ожидал его, чтобы создать список объектов и добавлять объекты в список obj_list_addresses.

Тогда, когда я вызываю get_good_addresses(), я ожидаю, что он вернется через этот список и выполнит код для каждого объекта в списке, только список возвращает empty [] почти как его переписывание.

Я довольно новичок в python и знаю, что мне не хватает чего-то важного.

Главная:

from address import Address 
from address_processor import AddressProcessor 
addresses=[] 
addresses = open('test.txt').read().splitlines() 
proccess_addresses = AddressProcessor(addresses) 
proccess_addresses.create_addresses_obj() 
proccess_addresses.get_good_addresses() 

AddressProcessor Класс:

import multiprocessing 
from address import Address 

class AddressProcessor(object): 
    """AddressProcessor will process a txt file with addresses""" 

    def __init__(self, addresses): 

     self.addresses = addresses 
     self.return_addresses = [] 
     self.obj_list_addresses = [] 

    def create_addresses_obj(self): 
     jobs = [] 
     for address in self.addresses: 
      process = multiprocessing.Process(target=self.worker, args=(address,)) 
      jobs.append(process) 
      process.start() 
     for job in jobs: 
      job.join() 
     print('created objects for addresses in text file') 

    def worker(self, address): 

     obj = Address(address) 
     self.obj_list_addresses.append(obj) 

    def get_good_addresses(self): 

     print self.obj_list_addresses 

Адрес Класс:

from string import replace 
from pprint import pprint 

class Address(object): 

""" 
This is address class send it an address it will look up 
the addy and return json string of the parcels that matched the address 
then update status if it was the only one returned its good if not its bad 
""" 

def __init__(self, address): 

    self.address = address 
    self.status = '' 
    self.json_string = '' 

    self.set_json_string() 

def get_address(self): 
    return self.address 

def set_json_string(self): 

    r = requests.get('urlbasegoeshere'+replace(self.address," ","+")+'&pagesize=40&page=1') 
    self.json_string = r.json 
    self.set_status() 

def set_status(self): 

    if len(self.json_string) == 1: 
     self.status = 1 

    elif len(self.json_string)!=1: 
     self.status = 0 

def get_status(self): 
    return self.status 

ответ

1

Почему вы используете 'многопроцессорных' для создания объектов адреса? Различные процессы не обмениваются памятью, т. Е. Не обмениваются объектами. Это не питон, это то же самое на любом языке, который вы используете.

Замените эти три линии

 process = multiprocessing.Process(target=self.worker, args=(address,)) 
     jobs.append(process) 
     process.start() 

с

 self.worker(address) 
+0

Я настраивал многопроцессорных пытался узнать, как это работает. В конечном итоге я буду проходить через каждый адрес в списке и выполнять несколько запросов на очистку данных и загрузку PDF-файлов для каждого адреса. Я надеялся использовать многопроцессорность, чтобы соединения и файлы PDF были загружены параллельно. Я приму свой ответ и позже открою другой, чтобы помочь с многопроцессорной обработкой. Спасибо – Mrd05d

+0

@ Mrd05d Database - лучший способ сделать это. –

+0

Вы говорите, что база данных упростит хранение информации вместо того, чтобы пытаться использовать переменные класса с многопроцессорной обработкой? – Mrd05d

Смежные вопросы