开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3846|回复: 1
收起左侧

[源码分享] Python实现投递多线程任务

[复制链接]
结帖率:100% (4/4)
发表于 2024-6-7 12:52:45 | 显示全部楼层 |阅读模式   重庆市重庆市
使用Python的apscheduler库中的BackgroundScheduler实现投递多线程任务的示例代码。这个示例将展示如何根据任务ID投递和停止任务,设置任务同时执行的上限,以及删除全部任务。
首先,确保你已经安装了apscheduler库:
[Python] 纯文本查看 复制代码
pip install apscheduler

示例代码
[Python] 纯文本查看 复制代码
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实现多线程任务的投递、停止和管理。

结帖率:100% (57/57)

签到天数: 18 天

发表于 2024-6-7 12:54:10 | 显示全部楼层   江西省南昌市
有点像是gpt写的。很像
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表