Mrd05d
Mrd05d

Reputation: 64

Python losing list of objects

When I execute this program I get an empty list:

I am expecting it to create the list of objects and append the objects to the obj_list_addresses list.

Then when I call the get_good_addresses() I expect it to go back through that list and execute code on each object in the list only the list returns empty [] almost like its getting overwritten.

I am fairly new to python and know that I am missing something important.

Main:

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 Class:

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

Address Class:

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

Upvotes: 0

Views: 262

Answers (1)

James Bear
James Bear

Reputation: 444

Why are you using 'multiprocessing' to create address objects? Different process don't share memory, i.e. they don't share objects. This is not a python thing, it's the same whatever language you use.

Replace these three lines

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

with

        self.worker(address)

Upvotes: 1

Related Questions