两个python文件-一个文件提供json对象,另一个文件将输出作为输入

holgip5t  于 2022-12-27  发布在  Python
关注(0)|答案(2)|浏览(106)

我是python的新手,如果我的提问方式是错误的,我向你道歉。
我有两个python文件,一个文件作为输入,另一个文件作为输出,问题是,我需要一次传递一个输入,所以python一个文件会有一个for循环,它会一个接一个地生成JSON,它应该只在for循环中一个接一个地传递JSON,这意味着,python文件2将运行,它从python文件1中获取输入并处理,然后从python文件1中获取第二个传入的JSON输出。这个过程一直持续到python one files结束循环

pythonone.py文件

import json,time
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)

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)

Python二.py

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

指导我如何才能实现这一目标
我不得不等待一个文件进行处理,然后选择第二个文件,然后选择第三个文件,直到www.example.com的for循环结束才pythonone.py

u3r8eeie

u3r8eeie1#

你应该引入threading的概念

  • 创建用于生成JSON的生产者方法
  • 创建一个消费者方法来消费JSON

condition variable允许一个或多个线程等待,直到另一个线程通知它们

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()
  • 生产者获取该对象,并将JSON添加到公共列表中,通知消费者并等待回调
  • 当消费者处于等待状态时,消费者获取对象,获取JSON并通知生产者从等待状态继续。
wtzytmuj

wtzytmuj2#

您的main需要返回一些数据,以便调用者可以使用它们,也可以使用更好的名称

  • 在每次迭代时都要重写json_obj_list,需要将它们收集到一个列表中
  • 你只生成了一次随机数,你需要在每次迭代中都这样做
  • 你没有在你的myrandomdata中使用i,你可以不需要faker来处理这样的随机整型
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)

相关问题