首页 > 编程语言 >Python实现投递多线程任务

Python实现投递多线程任务

时间:2024-06-07 12:56:00浏览次数:21  
标签:task Python job 投递 apscheduler 任务 scheduler 多线程 id

使用Python的apscheduler库中的BackgroundScheduler实现投递多线程任务的示例代码。这个示例将展示如何根据任务ID投递和停止任务,设置任务同时执行的上限,以及删除全部任务。

首先,确保你已经安装了apscheduler库:
``
pip install apscheduler

``

代码示例:
``
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ThreadPoolExecutor
from apscheduler.jobstores.memory import MemoryJobStore
import time

    # 定义任务函数
    def my_task(task_id):
        print(f"任务 {task_id} 正在执行")
        time.sleep(5)  # 模拟任务执行需要一些时间
        print(f"任务 {task_id} 完成")

    # 初始化调度器
    jobstores = {
        'default': MemoryJobStore()
    }
    executors = {
        'default': ThreadPoolExecutor(2)  # 设置任务同时执行上限为2
    }
    job_defaults = {
        'coalesce': False,  # 设置任务上限时不合并
        'max_instances': 2  # 每个任务的最大实例数为2
    }

    scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)
    scheduler.start()

    # 根据任务ID添加任务
    def add_task(task_id):
        scheduler.add_job(my_task, 'interval', seconds=10, id=task_id, args=[task_id])
        print(f"任务 {task_id} 已添加")

    # 根据任务ID停止任务
    def stop_task(task_id):
        scheduler.remove_job(task_id)
        print(f"任务 {task_id} 已停止")

    # 删除全部任务
    def remove_all_tasks():
        scheduler.remove_all_jobs()
        print("所有任务已删除")

    # 示例使用
    if __name__ == "__main__":
        # 添加任务
        add_task('task1')
        add_task('task2')

        # 等待一段时间,让任务执行几次
        time.sleep(30)

        # 停止任务
        stop_task('task1')

        # 等待一段时间,观察任务2继续执行
        time.sleep(20)

        # 删除所有任务
        remove_all_tasks()

        # 等待调度器关闭
        scheduler.shutdown()
        print("调度器已关闭")

``

注意事项
任务上限设置:通过设置executors中的ThreadPoolExecutor来限制同时执行的任务数量。这里设置为2。
任务合并(coalesce):设置job_defaults中的coalesce为False,表示当任务积压时不合并执行。
任务实例限制:设置job_defaults中的max_instances为2,表示每个任务的最大实例数为2。
任务ID:确保任务ID唯一,以便正确管理任务的启动和停止。
通过以上示例代码和解释,你可以了解如何使用BackgroundScheduler实现多线程任务的投递、停止和管理。

标签:task,Python,job,投递,apscheduler,任务,scheduler,多线程,id
From: https://www.cnblogs.com/mac666888/p/18237030

相关文章

  • python系列:FASTAPI系列 04-GET请求 params参数
    FASTAPI系列04-GET请求params参数FASTAPI系列04-GET请求params参数前言一、查询参数二、参数的默认值三、多路径查询参数四、查询参数为必填项总结FASTAPI系列04-GET请求params参数前言get请求的参数在url后面携带,通常称做queryparams一、查询参数在......
  • Python简单实现多线程例子
    使用Python实现多线程的例子,演示如何在主线程内分别启动ABC三个线程,并实现启动和停止指定线程的功能``importthreadingimporttime#定义一个全局标志,用于控制线程的运行状态stop_thread_A=Falsestop_thread_B=Falsestop_thread_C=False#线程A的函数......
  • Python数据分析常用开源库 pycharm
    内容介绍Pandas数据处理的库,可以做可视化文件类数据交互的是比较好的CSVExcel环境搭建起来SeriesDataFrame前3天主要介绍DataFrame的使用(Pandas的API)第四天数据可视化day05~day08Pandas解决数据分析问题报表,取数(SQL,Pandas,Excel)业务分析能......
  • python各种加解密方法
    #-*-encoding:utf-8-*-fromhashlibimportmd5importbase64#MD5加密obj=md5()str="你是个小可爱"obj.update(str.encode("utf-8"))#obj.update("wusir".encode('utf-8'))#可以添加多个被加密的内容bs=obj.hexdigest()print("md5......
  • 8-4 【Python0036】中文级联菜单
    importtkinterastkfromtkinterimportttkfrompypinyinimportlazy_pinyin#省份、城市、地区数据data={"北京":{"北京市":["东城区","西城区","朝阳区"],},"上海":{"上海市......
  • 用 Python 撸一个 Web 服务器-第9章:项目总结
    项目总结本教程带大家一起实现了一个TodoList程序,包含基础的增删改查功能,和用户登录认证。这也是Web开发中最常见的需求。我画了一张思维导图,帮助你从宏观的角度来概览TodoList程序,加深你对Web开发的理解。TodoList项目整体思路参考MVC设计模式。有意设计utils......
  • 用 Python 撸一个 Web 服务器-第8章:用户管理
    用户登录原理用户登录与注册功能几乎已成为Web应用的标配。所以我们有必要给TodoList程序增加一个用户管理模块,以此来学习用户登录原理。HTTP协议是无状态的,这意味着每个完整的HTTP请求——响应过程都是相对独立的,Web服务器无法分辨前后两次连续请求是否为同一个用户......
  • 用 Python 撸一个 Web 服务器-第7章:重构——更好的组织代码
    通过前几章的学习,我们完成了TodoList程序的todo管理部分,实现了对todo的增、删、改、查基本操作,这也是几乎所有Web程序都具备的功能。我们当然可以按照目前的思路继续来实现用户管理部分,在models.py中编写用户相关的模型,在templates/目录下新建用户相关HTML,在contro......
  • 【已解决】Python报错Pytorch:ModuleNotFoundError: No module named ‘torch’
    本文摘要:本文已解决Pytorch:ModuleNotFoundError:Nomodulenamed‘torch’的相关报错问题,并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。......
  • 【已解决】Python报错 ERROR: Could not find a version that satisfies the requirem
    本文摘要:本文已解决ERROR:Couldnotfindaversionthatsatisfiestherequirement的相关报错问题,并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。......