首页
学习
活动
专区
圈层
工具
发布

在Python中用Celery安排管理后台工作流

长时间运行的作业——在资源中花费昂贵的作业,用户在其计算结果时需要等待。例如复杂的工作流执行(DAG工作流程),图形生成,类似于任务的Map-Reduce,以及媒体内容的服务(视频,音频)。...摆脱GIL是Python开发人员中一个很有争议的话题,但这并不是本文的重点。...在Django中进行日志的配置非常简单。...情景3 - 每个任务的文件记录 在我的一个项目中,我开发了一个应用程序,它为终端用户提供了一个提取、转换、加载(ETL)的工具,这个工具能够接收并过滤大量的分层数据。...我们的团队选择使用芹菜作为后台作业和长时间运行的任务的后端。我们广泛地使用它来做各种各样的用例,在这篇文章中只提到了几个。我们每天摄取和分析千兆字节的数据,但这只是水平扩展技术的开始。

8.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用Django和FastCGI管理长时间运行的过程

    问题背景:有一个Django+FastCGI的应用程序,需要修改以执行长时间的计算(可能长达半小时或更久)。需要在后台运行计算,并返回“您的作业已启动”类型的响应。...在进程运行期间,进一步访问该URL应返回“您的作业仍在运行”,直到作业完成,此时应返回作业结果。以后任何对该URL的访问都应返回缓存的结果。...对Django不太熟悉,不知道是否有内置的方法来实现想要的功能。尝试通过subprocess.Popen()启动进程,但除了在进程表中留下一个失效的条目之外,它工作正常。...需要一个干净的解决方案,可以在进程完成后删除临时文件和进程的任何痕迹。也尝试了fork()和线程,但还没有想出可行的解决方案。想知道对于看似很常见的用例,是否存在规范的解决方案。...解决方案:可以使用两种可能的解决方案:调度长时任务到长时任务管理程序(可能是上面提到的Django-Queue-Service)。将结果永久保存,无论是文件还是数据库。

    39010

    那一次,Python 让我彻底「沦陷」

    2017 年的 6 月 28 日,由于工作上需要对很多作业的跑批进行监控,需要及时知道哪些作业报错,以便及时处理。...对 Django 还不熟悉但感兴趣的同学有时间可以去官网逛逛,https://docs.djangoproject.com/en/2.1/intro/tutorial01/ 跟着教程一步一步来,不到 1...再开启一个新的终端/命令窗口,使用 curl 工具来提交 post 请求,其中 from_email 可不写,默认值见视图函数。...注意,大部分系统的命令窗口默认是 UTF-8 编码,但 Windows 除外,如果在 Windows 系统下执行 curl(在 git bash 窗口中可以使用 curl),为了防止出现乱码,需要在前面指定字符集编码...INFO 2019-01-28 12:19:37,068 basehttp 26852 140248897447680 "POST /api/sendemail/ HTTP/1.1" 200 48 同时在终端界面也有相应的信息打印

    74120

    关于“Python”的核心知识点整理大全64

    在2处,我们将DEBUG设置为False,让Django不在错误发生时显示敏感 信息。...下面的终端会 话演示了这个过程: 1 (ll_env)learning_log$ git commit -am "Set DEBUG=False for Heroku."...当前,在这两种情况下,Django都返回通用的错误页面,但我们可以编写外观与“学习笔记”一 致的404和500错误页面模板。这些模板必须放在根模板目录中。 1....在本地查看错误页面 在将项目推送到Heroku之前,如果你要在本地查看错误页面是什么样的,首先需要在本地设 置中设置Debug=False,以禁止显示默认的Django调试页面。...Django尝试渲染请求的页 面,但没有足够的信息来完成这项任务,进而引发500错误。对于这种情形,将其视为404错误更 合适,为此可使用Django快捷函数get_object_or_404()。

    1.9K10

    Django教程 —— 模型设计

    Django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。...使用Django进行数据库开发的步骤如下: 在models.py中定义模型类 迁移 通过类和对象完成数据增删改查操作 Django模型设计 在上篇文章中我们创建了一个图书管理系统(BMSTest),...生成迁移文件 在 PyCharm Terminal 终端下输入如下命令: python manage.py makemigrations 执行生成迁移文件命令后,会在应用book目录下的migrations...同时我们发现多了一个id项,这一项是Django框架帮我们自动生成的,在创建表的时候id就会作为对应表的主键列,并且主键列自动增长。...执行迁移文件 在 PyCharm Terminal 终端下输入如下命令: python manage.py migrate 执行结果 (py_django) D:\Hui\Code\Python\DjangoProject

    1.4K10

    基于 Django 的手机管理系统

    前段时间和小组一起完成数据库作业,觉得收获挺多的,分享到博客来。...此数据库字段由于是我从 sqlite 迁移到 MySQL 中,Django 自动帮我再生成的字段,所以有些字段名和我在 Django 写的字段不一致,但数据表关系还是一致的。...在 Django 中设计数据表相关代码如下: from django.db import models # Create your models here....models.URLField(default='http://i.imgur.com/z230eeq.png') def __str__(self): return self.description 在终端下执行以下指令...三、设计网站 设计网站,在 Django 中增加 static 文件和 template 文件,套用相关模板和框架(这里运用了 bootstrap),编写 HTML 文件,调用数据库中的内容,设计的网站如下

    1.8K40

    一个数据库事务 Bug 引发的惨剧

    创建一个付款操作 为了完成付款流程,我们有一个名为 PayoutProcess 的 Django 模型。...return payout 这个函数的简化版本可以创建一个付款流程的新实例并返回它。在现实应用中,这个函数会验证输入并创建几个相关的对象。...稍后安排异步任务并在发送前检查状态 这在某些情况下可能是可行的,但还有其他问题: 我们有了争用:在处理付款后多长时间应该执行任务?1 秒?10 秒?1 分钟?如果批量流程需要两分钟才能完成怎么办?...如果你使用一个 cron 作业来处理任务,发送操作可能会延迟到 cron 作业的重复间隔时。如果你使用数据库触发器、LISTEN/NOTIFY 或类似触发器的东西处理任务,则延迟可以更短一些。...然而,在我们完成对代码的更改之后,我们又面临了另一个挑战——测试!

    1.3K20

    Django教程 —— 模型设计

    Django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。...使用Django进行数据库开发的步骤如下: 在models.py中定义模型类 迁移 通过类和对象完成数据增删改查操作 Django模型设计 在上篇文章中我们创建了一个图书管理系统(BMSTest),并部署了一个...生成迁移文件 在 PyCharm Terminal 终端下输入如下命令: python manage.py makemigrations 执行生成迁移文件命令后,会在应用book目录下的migrations...同时我们发现多了一个id项,这一项是Django框架帮我们自动生成的,在创建表的时候id就会作为对应表的主键列,并且主键列自动增长。...执行迁移文件 在 PyCharm Terminal 终端下输入如下命令: python manage.py migrate 执行结果 (py_django) D:\Hui\Code\Python\DjangoProject

    1.1K20

    【在Linux世界中追寻伟大的One Piece】进程间关系与守护进程

    3 -> 控制终端 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端。...放在后台执⾏的程序或命令称为后台命令,可以在命令的后面加上&符号从而让Shell识别这是一个后台命令,后台命令不用等待该命令执⾏完成,就可立即接收新的命令,另外后台进程执行完后会返回一个作业号以及一个进程号...4.3 -> 作业状态 常见的作业状态如下表: 作业状态 含义 正在运行【Running】 后台作业(&),表示正在执行 完成【Done】 作业已完成,返回的状态码为0 完成并退出【Done(code)...】 作业已完成并退出,返回的状态码为非0 已停止【Stopped】 前台作业,当前被Ctrl+Z挂起 已终止【Terminated】 作业被终止 4.4 -> 作业的挂起与切回 4.4.1 -> 作业挂起...在unix系统中, 存在3个特殊字符可以使得终端驱动程序产生信号, 并将信号发送至前台进程组作业, 它们分别是: Ctrl + C:中断字符,会产生SIGINT信号。

    45110

    第20篇-不和谐如何索引数十亿条消息

    对于团队的其他成员,该库暴露了用于搜索消息的最小表面积: 排队要编制索引或删除的消息: 批量索引工作人员中的实时消息(大致): 为了对服务器的历史消息建立索引,一个历史索引作业将执行一个工作单元,并返回继续运行该服务器所需的下一个作业...每个作业代表进入服务器消息历史记录和固定执行单位的光标(在这种情况下,默认值为500条消息)。作业将新游标返回到要索引的下一批消息,如果没有更多工作要做,则返回“无”。...之后,我们在“深层”阶段对整个历史进行索引,该阶段以较低的优先级执行。本文显示给用户的外观。这些作业在一组芹菜工作者中执行,从而可以在这些工作者执行的其他任务中安排这些工作。...一整夜,Elasticsearch在空闲时将其生成的大量细小段合并为磁盘上更大(但更节省空间)的段。...例如,如果磁盘使用率很高,但其他指标处于可接受的水平,则我们将选择添加更多的磁盘空间而不是新节点。 3. cpu_usage:如果我们在高峰时段达到CPU使用量的阈值。

    2.8K00

    Python的框架集合

    doitlive - 在终端现场演示的工具。httpie - 命令行 HTTP 客户端、 用户友好。PathPicker - 选择文件从 bash 输出。...-一个微小的,但功能强大的应用程序提供对象级权限的Django,而不需要一个数据库。   ...django-cms - 基于Django的一个开源的企业CMS。djedi-cms - 一个轻量级的,但尚未强大的Django的CMS插件,内联编辑和性能的初衷。...Queue -在Python中使用Redis的&GEVENT分布式工作者任务队列。rq -  简单的作业队列为Python。simpleq - 一个简单的,可无限扩展,基于亚马逊SQS队列。   ...APScheduler -一个轻,但功能强大的流程任务调度程序,让您安排的功能。django-schedule - Django 一个日历应用程序。doit - 任务转轮/生成工具。

    2.7K10

    django部署在windows使用nginx_nginx的原理

    霓虹闪烁,但人们真正需要的,只是一个可以照亮前路的烛光 二、必要的前提 2.1 准备知识 django 一个基于python的开源web框架,请确保自己熟悉它的框架目录结构。...nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi, wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,...; 4. django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。...其次,确保自己安装完成了python,并已经完成了pip的安装。如果没有,请先安装。 接着,别忘了确认自己项目所需的django已经完成安装并正常工作。...如果启动时就报错,查看终端信息,解决错误。 如果终端没有报错,但是浏览时出现500、502等错误,就去项目目录查看nginx日志和uWSGI日志,解决错误。

    2K40

    Django博客开发教程-Python零基础开发网站

    Django 提供了通用 Web 开发模式的高度抽象,为频繁进行的编程作业提供了快速解决方法,并为“如何解决问题”提供了清晰明了的约定。...点击创建之后,Pycharm自动帮我们完成Django软件下载安装和Django的项目创建。...在终端输入python manege.py help,可以查看功能。 Django博客开发教程:基础配置 创建项目之后,我们需要对项目进行最基础的配置。...在Pycharm左下角底部的Terminal,会弹出Terminal终端窗口,Pycharm自动会帮我们启动虚拟环境。如下图所示: ?...如果没有虚拟环境名,则进入项目目录下的myblogvenv\Scripts目录里,在终端输入activate启动虚拟环境,然后再切换到项目根目录里。

    1.3K20

    【Python全栈100天学习笔记】Day48 前后端分离开发入门

    支持多终端和服务化架构。前后端分离后,同一套数据接口可以为不同的终端提供服务,更有助于打造多终端应用;此外,由于后端提供的接口之间可以通过HTTP(S)进行调用,有助于打造服务化架构(包括微服务)。...在Django项目中,我们可以先将对象处理成字典,然后就可以利用Django封装的JsonResponse向浏览器返回JSON格式的数据,具体的做法如下所示。...) 上面的代码中,我们通过循环遍历查询学科得到的QuerySet对象,将每个学科的数据处理成一个字典,在将字典保存在名为subjects的列表容器中,最后利用JsonResponse完成对列表的序列化,...由于JsonResponse序列化的是一个列表而不是字典,所以需要指定safe参数的值为False才能完成对subjects的序列化,否则会产生TypeError异常。...在开发阶段,我们通常会使用Django自带的测试服务器,如果要尝试前后端分离,可以先将静态页面放在之前创建的放静态资源的目录下,具体的做法可以参考项目完整代码。

    67710

    Python中有啥好用的开源任务调度管理项目

    后者的运行依赖前者运行完成。...、固定时间间隔以及crontab 类型的任务,可以在主程序的运行过程中快速增加新作业或删除旧作业,如果把作业存储在数据库中,那么作业的状态会被保存,当调度器重启时,不必重新添加作业,作业会恢复原状态继续执行...相应的在Django中有集成包——django-apscheduler,它是一个 Django 应用程序,它为 APScheduler 添加了一个轻量级的包装器。...它允许使用 Django 的 ORM 在数据库中存储持久作业。...但列表中编辑功能不可用,也没有在列表操作中接入任务日志查看的功能。 总结: 有句话说,踏破铁鞋无觅处,得来全不费功夫。

    12.5K23

    【Python】APScheduler简介

    但如果你需要持久化你的作业以面对 scheduler 重启或者应用程序崩溃的情况,那么你的选择通常需要考虑你在程序运行环境中所使用的工具。...scheduler 之前完成 下面是一个更加复杂而具体的例子:你有两个 job store 以及两个 executor ,同时要求调整新作业的默认值以设置不同的时区。...add_job()方法返回一个apscheduler.job.Job实例,你可以用它来在之后修改或移除 job 。 你可以随时调度 scheduler 里的 job 。...如果你不想等待,可以这样: scheduler.shutdown(wait=False) 这样依旧会终止 job store 和 executor ,但不会等待任何运行中的任务完成。...如果你想在 Django 中运行,可以考虑django_apscheduler,不过要注意,这个是第三方库而 APScheduler 的开发者不能保证其质量。

    3.3K20
    领券