Python对象无法正确重新实例化-保留先前的属性

时间:2019-07-12 19:21:03

标签: python python-3.x

我有多个分批运行的作业。批处理在某些时间运行。我希望仅在满足特定条件的情况下运行批处理中的作业。为此,我有条件函数。示例中有新数据可用或已运行从属作业。我的批处理对象将无法识别条件的变化。这让我觉得没有重新实例化。我对我对python的误解以及如何正确解决此问题感兴趣。

我试图将函数移入batch_runner函数的内部和外部,但没有成功。

class Batch():

    def __init__(self,jobs):
        self.job_dict = jobs
        self.job_keys = sorted([key for key in jobs],reverse=False)

    def run(self):
        for jb_nm in self.job_keys:
            if all(self.job_dict[jb_nm][1]):
                print('Batch Oject Evaluates to:',all(self.job_dict[jb_nm][1]))
                self.job_dict[jb_nm][0]()
            else:
                print('Batch Object Evaluates to False')


def job1():
    print('did job 1')

def job_condition(test):
    print("job_condition evaluates to:",test==1)
    return test==1

def batch_runner(test,reset):
    import schedule
    from datetime import datetime
    import time
    print('restart: Test =',test)
    batch1 = Batch(
        {
            1:[job1,[job_condition(test)]],
            #2:[job2,[business_day()]],
            #3:[job3,[file_exits()]]
        }
    ) 
    schedule.every(10).seconds.do(batch1.run)
    schedule.jobs

    while datetime.today().strftime('%M') == reset:
        schedule.run_pending()
        time.sleep(1)

from datetime import datetime
test = 0 # change to another number to view object eval to False
while True:
    test+=1
    reset = datetime.today().strftime('%M')
    batch_runner(test,reset)

1 个答案:

答案 0 :(得分:0)

问题不是Batch对象。计划模块存储函数的每个实例。我猜这是关闭的例子吗?如果我错了纠正我。我使用schedule.clear()对batch_runner进行了更改以解决该问题

def batch_runner(test,reset):
    import schedule
    from datetime import datetime
    import time
    print('restart: Test =',test)
    schedule.clear('batch1')
    batch1 = Batch(
        {
            1:[job1,[job_condition(test)]],
            #2:[job2,[business_day()]],
            #3:[job3,[file_exits()]]
        }
    ) 
    schedule.every(10).seconds.do(batch1.run).tag('batch1')
    schedule.jobs

    while datetime.today().strftime('%M') == reset:
        schedule.run_pending()
        time.sleep(1)