Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3中调度事件_Python_Python 3.x_Scheduled Tasks - Fatal编程技术网

在Python3中调度事件

在Python3中调度事件,python,python-3.x,scheduled-tasks,Python,Python 3.x,Scheduled Tasks,我有4个python脚本,大部分是从命令行运行的。我一直在尝试安排他们,但到目前为止,我还没有找到一个好方法来做到这一点。我对这一切应该如何运作有一些要求 我的脚本及其作用: 脚本编号1;扫描数据库中的大量记录并进行一些处理 脚本编号2;执行更多处理,应仅在脚本编号1完成后运行 脚本编号3和4;这些脚本与1或2无关,但应每小时运行一次 有什么建议用Python调度这些脚本的最佳方法吗?我知道需要调度所需的作业。 对于调度作业,最好使用像Jenkins这样的CI工具 为脚本1和脚本2创建作业,并在

我有4个python脚本,大部分是从命令行运行的。我一直在尝试安排他们,但到目前为止,我还没有找到一个好方法来做到这一点。我对这一切应该如何运作有一些要求

我的脚本及其作用:

脚本编号1;扫描数据库中的大量记录并进行一些处理

脚本编号2;执行更多处理,应仅在脚本编号1完成后运行

脚本编号3和4;这些脚本与1或2无关,但应每小时运行一次


有什么建议用Python调度这些脚本的最佳方法吗?

我知道需要调度所需的作业。 对于调度作业,最好使用像Jenkins这样的CI工具

  • 为脚本1和脚本2创建作业,并在完成脚本1后运行脚本2
  • 为每小时运行的脚本3和脚本4分别创建两个作业

  • 有一个很好的框架来调度python(不仅仅是python!)脚本! 看一看: 它在github已经有了13k的stars,在许多公司的prod中使用,并且有很多教程。它由spotify开发和支持,因此正在积极更新。当然,还有开源:)

    用户可以通过PyPi轻松安装,下一步:

    pip install luigi
    
    如果您愿意,它甚至有web GUI。
    我真的推荐它

    如果您想继续使用Python,有一个apscheduler。 与其单独运行脚本,不如导入脚本并运行其函数

    例如:

    import time
    from apscheduler.schedulers.background import BackgroundScheduler
    scheduler = BackgroundScheduler()
    
    # your script 1 main function (should be imported instead of creating here)
    def my_script1():
        pass
    
    # your script 2 main function (should be imported instead of creating here)
    def my_script2():
        pass
    
    
    # This exists so 
    def my_script_runner():
        my_script1()
        my_script2()
    
    # your script 3 main function (should be imported instead of creating here)
    def my_script3(id=None):
        print(id)
    
    job_kwargs = {
        'id': 1
    }
    
    # Hourly job
    
    scheduler.add_job(my_script_runner, 'interval', [], None, name='myscripts1and2', seconds=7200)
    
    scheduler.add_job(fn, 'interval', [], job_kwargs, name='myscript3', seconds=3600)
    scheduler.start()
    
    
    # Main executer loop
    try:
        while True:
            time.sleep(2)
    except (KeyboardInterrupt, SystemExit):
        scheduler.shutdown()
    

    您正在使用的操作系统是什么?在python中调度脚本是一项困难的要求吗?通常,人们会使用诸如cron或systemd之类的工具来安排每小时的运行时间(假设是linux)。下面是您可以参考的链接-如果您使用的是类似linux的操作系统,不要过于复杂,只需使用
    cron
    (),并创建独立的计划即可。第一个计划将运行:
    python/path/to/script1.py&&python/path/to/scrip2.py
    。第二个计划应每小时运行一次(cron expression
    0****
    ),并应运行
    python/path/to/scrip3.py
    。最后,第三个计划也应该每小时计划一次(cron expression
    0****
    ),并且应该运行
    python/path/to/scrip4.py