- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个Django应用,打算在LAN上的Virtualbox VM上运行。基本用户将是精明的IT最终用户,而不是sysadmin。
该应用程序的一部分工作是连接到LAN上的外部数据库,对这些数据库运行一些python批处理,并将结果保存在其本地db中。然后,用户可以使用Django页面浏览系统。
批处理的运行时间并没有那么长,但可以运行到几分钟,可能长达几十分钟,而不是几秒钟。运行频率充其量很少,我认为您可以花几天时间而无需刷新。
这不是celery的长任务正常使用情况,最终会通过ajax和/或轮询将结果推回Web UI。它更类似于开发人员偶尔使用django-admin命令,但这一次是面向最终用户的。
用户应能够在需要时启动一个或多个批处理的运行,以刷新给定外部数据库的计算(目标数据库是该批处理的参数)。
在完成给定数据库的批处理之前,该应用程序确实无法使用。您可以访问其页面,但是许多功能将不可用。
从支持的角度来看,批处理始终保持易于运行非常重要。降落到虚拟机SSH可能需要频繁握住,这并不好-最好从Django网页启动它们。
我目前所拥有的:
每个批次都在其自己的脚本中。
我可以在命令行上运行它(通过__name__ ==“ main” :)。
批次也作为芹菜任务挂接,并且可以正常工作。
考虑到我编写它们的方式,允许我从Python中的子进程调用运行它们相对容易。我还没有真正研究过它,但是我想我也可以将它们放入django-admin命令中。
这些批次已经有自己的基本状态检查。例如,他们可以查看计算出的数据,并判断它们是否已运行并将其显示在Django页面中,而无需查看celery任务状态后端。
批次本身相对强大,我可以使其更强大。这是关于它们的启动机制。
不太好。
在Mac开发环境中,我发现celery / celerycam / rabbitmq堆栈有些不稳定。似乎有时Rabbitmqs守护程序在CPU / RAM使用中迅速增加,然后需要终止。这可能会使芹菜加工过程感到困惑,我发现我必须杀死-9个不同的任务并手动重新启动它们。有时celery仍然有效,但是celerycam不能工作,因此没有任务更新。其中一些问题可能是OSX特有的,或者可能是由于DEBUG标志暂时切换所致,这是芹菜警告的。
因此,我需要在命令行上运行批处理,这是我要避免的操作,直到重置了整个芹菜堆栈。
在普通网站上,管理员可以监视它,这是可以接受的。但是我不能在只有用户有权访问的远程VM上发生这种情况。
考虑到这些都是一劳永逸的批次,我想知道芹菜在这一点上是否还算不算过分。
我考虑过的一些选择:
编写清理shell / Python脚本以重新启动rabbitmq / celery / celerycam,通常使其更强大。即使芹菜和一切稳定所需的一切。我已经使用psutil找出兔子/芹菜进程正在运行,并在Django中显示它们的状态。
而是通过子流程运行批次,避免使用芹菜。那么django-admin命令呢?这有什么区别吗?仍然需要从网页上运行。
芹菜的替代任务/过程管理器功能较少,但活动部件也较少?
不使用子进程,而是依靠Python多处理模块?老实说,我不知道与通过子流程启动相比。
环境:
nginx,wsgi,virtualbox上的ubuntu,厨师来构建VM。
最佳答案
我不确定您的芹菜配置如何使其不稳定,但听起来它仍然最适合您的问题。我使用redis
作为队列系统,根据我的经验,它比rabbitmq
更好。也许您可以尝试一下,看看它是否可以改善情况。
否则,只需使用cron
作为驱动程序来运行定期任务。您可以让它定期运行脚本并更新数据库,您的UI组件将轮询数据库而不会发生冲突。
关于python - 在Django下执行长时间运行的任务/批处理的可靠方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952327/
我正在尝试运行以下内容:: Press to see code - name: Snapshot BI nodes hosts: [CLUSTER-BI,CLUSTER-BI-REPL
在这里尝试心理重置:我尝试使用 MSMQ 创建一个可靠、持久的堆栈,但没有成功 所以更一般地说: 我有生产者(一个 web 服务,虽然“只有一个”,但也是多线程的)/消费者(多个进程,根据需要设置)。
试图为分布式系统找到一个商业日志框架。此框架必须允许远程服务器上的 .NET 应用程序记录可以在中央位置收集的消息。如果可能,中央位置应将消息存储在 SQL Server 数据库中。 要求: 能够在远
我正在开发 Restful 服务,我们将在数据库中插入/更新新记录。 由于REST使用HTTP进行通信,而HTTP并不可靠,我担心如果连接失败,请求可能无法发送到服务器。 我在 link 中找到的建议
我正在尝试实现一个页面,员工可以在其中登录并添加、修改、更新工作案例。 我有一个选择列表,其中包含从数据库加载的数据(员工姓名)。在这个数据库中,我有基本信息、用户名、ID、密码、电子邮件。 选择列表
我在 C 代码和 Python 代码之间(偶尔)得到略有不同的计算结果,并设法找到了一个例子。在 Python 中,我得到了这个: >>> print "%.55f" %\ ... (-2.49999
例如如果我将计时器设置为每天午夜到期,如果一个“失火”(例如,由于服务器关闭而不会触发回调)会发生什么?我在文档中找不到它。 有没有办法让这个定时器在服务器重启时立即触发回调? PS:我了解 Quar
我有一组不同长度的非零序列,我正在使用 Keras LSTM 对这些序列建模。我使用 Keras Tokenizer 进行分词(分词从 1 开始)。为了使序列具有相同的长度,我使用了填充。 填充示例:
我遇到了一个非常有趣的可靠 session 行为。我正在使用 netTcp 绑定(bind) + 双工 channel + 可靠 session 。 当我尝试在 channel.faulted 上收听
问题: 给定表 table_a 和 table_b,每当 table_a 更新时,我都需要可靠地(并发地)执行这样的操作: SELECT table_a 中的一些行。 在应用程序代码中计算一些内容。
我们目前的设计 环境 Redis 2.8.17 我们已经实现了我们的可靠队列,使用类似于 redis 文档中描述的模式的模式,在 RPOPLPUSH 下 但是,考虑到其阻塞性质,我们正在使用 BRPO
在我们的 WCF 应用程序中,我正在尝试配置可靠的 session 。 服务: 客户:
我使用这个 Delphi 7 代码来检测 Internet Explorer 是否正在运行: function IERunning: Boolean; begin Result := FindWi
我正在准备构建一个应用程序,该应用程序能够向 GPS 设备发送/接收航路点。通过一些谷歌搜索,我发现了很多可能对此目的有用的库: Java Chaeron GPS GPSLib4J Python Py
我有几个关于 WCF 可靠 session 可靠性的问题: WCF 是否在重试期间重新序列化消息? 2。如果 1 是正确的 - 它是否在消息参数被处理后发生? 3. 如果 2 是正确的 - 是否有任何
对于使用 $(this)[0].defaultValue 来确定文本框值是否已从原始值发生变化的一些反馈,我将不胜感激,例如 //keyUp event if($(this)[0].defaultVa
我正在开发一个具有以下特征的实时应用程序: 数百个客户端将同时插入行/文档,每个客户端每隔几秒插入一行。 大部分仅追加;几乎所有的行/文档,一旦插入,就永远不会改变。 只有当数据刷新到磁盘时,客户端才
场景:最终用户(不受信任的)提供了一个字符串,例如 "Hello, {name}!" .在服务器上,我想以 my_string.format(name="Homer") 的形式对该用户提供的字符串进行
我在推送通知方面遇到一些问题。我们使用 Firebase 来推送通知。问题是我可以在一台 iPhone 上正确接收 PushNotifications,但无法在另一台 iPhone 上接收它们。我在
从 python 到 c++,这是我能得到的最接近 python 的装饰器。 这个解决方案感觉有点像 hack,因为在要装饰的函数之后运行的代码在 Timer 析构函数中是隐式调用的。不过它确实有效。
我是一名优秀的程序员,十分优秀!