skip to Main Content

I’m new to python and apologies if my way of questioning is wrong.

I have two python files. one file will take as input and another file’s output. Problem is, I need to pass input one at a time. So python one file will have a for loop and it generates JSON one by one and it should pass JSON one by one in that for loop only. It means python file two will be running and it takes input from python file one and processes and picks the second incoming JSON output from python file one. This process continues till the python one file ends its loop

**pythonone.py file
**

import json, time
from faker import Faker

#Create a Faker object to generate fake data for the Producer
fake=Faker()

def myrandomdata(i,j):
    return fake.random_int(min = 1, max = j)

json_obj_list = []
random_ins_id = str(myrandomdata(20000,10000000))
random_inv_item_id = str(myrandomdata(20000,10000000))
random_inv_org_id = str(myrandomdata(1000,100000))
random_loc_id = str(myrandomdata(20000,100000))
qty = myrandomdata(1,100)
loc_type_id = myrandomdata(0,4)

def main():
    for i in range(5):
        json_obj_list={'ID': random_ins_id,
            'QTY': qty,
            'EXT_REF': random_loc_id,
            'INV_ITEM_ID': random_inv_item_id,
            'ORG_ID': random_inv_org_id,
            'SERIAL_NUMBER': loc_type_id
            }
    json_dump = json.dumps(json_obj_list, indent="t")
    print(json_dump)
    time.sleep(3)

**Pythontwo.py
**

def process_my_data:
    res= pythonone.main()
    /*I do some process */

Guide me on how can i achieve this

I am stuck to wait one file to process and pick second one and then 3rd one and stops till for loop ends from pythonone.py

2

Answers


  1. Your main needs to return some data, so the caller can use them, also use better names

    • you’re overwritting json_obj_list at each iteration, you need to collect them in a list
    • you’re generating the random number once, you need to do it for each iteration
    • you’re not using i in your myrandomdata, and you can don’t need faker for such random int
    
    from random import randrange
    
    def myrandomdata(i, j):
        return randrange(i, j + 1)
    
    def generate_items():
        json_obj_list = []
        for i in range(5):
            json_obj_list.append({'ID': myrandomdata(20000, 10000000),
                                  'QTY': myrandomdata(1, 100),
                                  'EXT_REF': myrandomdata(20000, 100000),
                                  'INV_ITEM_ID': myrandomdata(20000, 10000000),
                                  'ORG_ID': myrandomdata(1000, 100000),
                                  'SERIAL_NUMBER': myrandomdata(0, 4)})
        return json_obj_list
    
    def process_my_data():
        res = pythonone.generate_items()
        for item in res:
            print(type(item), item)
    
    Login or Signup to reply.
  2. you should bring in threading concept

    • create a producer method for producing JSON
    • create a consumer method for consuming that JSON

    condition variable allows one or more threads to wait until they are notified by another thread

    import json,time
    from threading import *
    from faker import Faker
    
    #Create Faker object to generate fake data for Producer
    fake=Faker()
    
    def myrandomdata(i,j):
        return fake.random_int(min = 1, max = j)
    
    li = [ ]
    random_ins_id = str(myrandomdata(20000,10000000))
    random_inv_item_id = str(myrandomdata(20000,10000000))
    random_inv_org_id = str(myrandomdata(1000,100000))
    random_loc_id = str(myrandomdata(20000,100000))
    qty = myrandomdata(1,100)
    loc_type_id = myrandomdata(0,4)
    
    def produce():
        for i in range(3):
            condition_object.acquire()
            json_obj_list={'ID': random_ins_id,
                'QTY': qty,
                'EXT_REF': random_loc_id,
                'INV_ITEM_ID': random_inv_item_id,
                'ORG_ID': random_inv_org_id,
                'SERIAL_NUMBER': loc_type_id
                }
            print("produced json",json_obj_list)
            li.append(json_obj_list)
            condition_object.notify()
            condition_object.wait()
            
    def consume():
        for i in range(3):
            condition_object.acquire()
            json = li.pop()
            print("the json for consuming ", json)
            condition_object.notify()
            condition_object.wait()
            
            
    condition_object = Condition()
    T1 = Thread(target=produce)
    
    T2 = Thread(target=consume)
    
    T1.start()
    
    T2.start()
    
    • the produces acquires the object and adds the JSON to a common list and notify the consumer and wait for call back
    • while the consumer acquires the object gets the JSON and notify the producer to continue from waiting state while the consumer being in waiting state .
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search