让你的用户面对芹菜的工作完全令人敬畏

jobtastic的Python项目详细描述


#JobTastic-芹菜任务加上更棒的

[![构建状态](https://travis-ci.org/policyStat/jobtastic.png?branch=master)"(https://travis ci.org/policyStat/jobtastic)


jobtastic让您的用户能够长期响应
[芹菜](http://celleryproject.org)作业非常棒。
芹菜是无处不在的python作业排队工具
,jobtastic是一个python库
,它添加了有用的芹菜的特色。
特别是,如果你的工作结果很昂贵,或者你的用户在计算结果时需要等待,你可能会希望这些功能



jobtastic给你带来如下好处:
*简单的进度估计/报告
*工作状态反馈处理一个死掉的任务代理
(`delay恚or恚eager`和`delay恚or恚fail`)
*超级简单的结果缓存
*[Thundering Herd](http://en.wikipedia.org/wiki/Thundering恚Herd恚problem)避免
*与
[芹菜jquery插件](https://github.com/policyStat/jquery芹菜)集成
为了方便客户端进度显示,在任务运行中进行内存泄漏检测,可以使用jobtastic让芹菜作业变得更出色。



如果您有用户必须等待的面向用户的任务,则应尝试jobtastic。
它非常适用于:
*复杂报表
*图形生成
*csv导出
*任何长时间运行的面向用户的任务

您可以自己编写所有内容,但为什么?

安装

1.在ubuntu上安装gcc和python c头
,这样您就可以构建[psutil](https://github.com/giampalo/psutil/blob/master/install.rst)。


这意味着在ubuntu上运行:

`$sudo apt get install build essential python dev python2.7-dev python3.5-dev rabbitmq server`

os x,你需要运行"xcodetools"安装程序。获取项目源并安装它

`$pip install jobtastic`

\lotsofdisiontask(jobtastictask):
"
分区很难。让芹菜做一堆。
"
"这些是用于缓存的重要任务kwargs
significant kwargs=[
('numerators',str)、
('minators',str)、
]

群避免超时=60不应超过60秒
我们希望缓存具有相同"显著"Kwargs的结果的时间长度
缓存持续时间=0永远缓存这些结果。数学相当稳定。
注意:0表示不同缓存后端中的不同内容。你的rtfm。

def计算结果(自我、分子、分母,**kwargs):
"
数学!!!!
"
结果=[]
除法从u到do=len(分子)
仅实际每10个操作更新后端的进度
更新频率=10
计数、枚举除数(zip(分子、分母)):
分子,分母=除数
结果。附加(分子/分母)
让我们让每个人都知道我们是如何做的
自我。更新进度(
计数,
除法到除法,
更新频率=更新频率,

假设我们使用的是登陆月球的计算机
sleep(0.1)

一个双击器可以使此操作同时发生两次,
我们不希望在相同的数字上重复此操作
,我们希望用户至少知道如何ng他们需要等待。
通过设置这3个成员变量,我们已经完成了所有这些工作。

子类化"jobtastic.jobtastictask"
2。定义一些必需的成员变量
3。编写"calculate_result"方法
(而不是普通的芹菜"run()"方法)
4。sprinkling`update_progress()`调用'calculate_result()`方法
来传达进度

现在,要在django视图中使用此任务,你可以这样做:

`` python
从django.shortcuts import render\u response

=request.get.get('迭代次数',1000)太多了。对吗?
步骤=10

K?
result=lotsofdisiontask.delay_或_fail(
分子=范围(0,步骤*迭代次数*2,步骤*2),
分母=范围(1,步骤*迭代次数,步骤),





```

`my_app/let_divide.html`模板将使用'task_id`
查询所有异步的任务结果,如
,并让用户了解最新情况。

你可以这样做:

`` python
从烧瓶导入烧瓶,渲染模板

1000)
step=10

result=lotsofdivisiontask.delay\u或u fail(
numerators=range(0,step*iterations*2,step*2),
minators=range(1,step*iterations,step),


return render\u template('my\u app/let\u divide.html',task\u id=result.task\u id)
````

###必需的成员变量

",但请稍候,wes。这些成员变量到底做了什么?"你先问。你怎么知道我的名字?

和b,我为什么不告诉你!?

运行。
在我们的分区示例中,
任何具有相同分子和分母的任务都可以被认为是相同的,
因此jobtastic可以做一些聪明的事情。

``` python
significant\kwargs=[
('numerators',str),
('minators',str),
]
```


]
```

现在,使用相同分子列表调用的任务将共享一个结果。


非常高端的
等待结果的时间
(任务开始后)

如果达到此数字,
假设另一个任务运行时发生了错误
(工作进程失败)
,我们将从头开始计算。

您只需设置"缓存持续时间"即可启用结果缓存。


r/>应该尝试重新使用缓存的结果。
默认值为-1,
表示不要进行任何缓存。
记住,
`jobtastictask`使用您的"重要"kwargs`来确定什么是相同的。



而应该让jobtastic使用"module.class"名称。
如果您有两个不同的任务应该共享缓存,
或者您有一些非常奇怪的缓存密钥冲突,
然后您可以自己更改此设置。
您可能不需要更改。


增加常驻内存
超过此阈值
获取一些额外的日志
,以帮助您调试问题。
默认情况下,它通过标准芹菜日志记录以下内容:
*内存增加
*内存起始值
*内存结束值
*任务的kwargs

然后在日志中为"jobtastic:memleak memleak"检测到grep
以识别有问题的任务。

要自定义此行为,
可以在自己的"任务"中重写"内存泄漏警告"方法。



*在任务中做点什么。


他们会等着的。


您需要定期拨打以下电话:

``python
self.更新进度(完成的工作,完成的总工作)
```


jobtastic负责处理计时器以给出估计值,
并假设每个工作项的进度大致相同。


您真的不需要超细粒度的进度更新
,而且您只需提供每完成一个"n"项的更新即可。
因为每次更新都可能会影响到您的
[芹菜结果后端](http://celeri.github.com/celeri/configuration.html\celeri result后端),
这可能会因为一次网络旅行,
最好使用可选的"更新频率"参数
,这样jobtastic就不会用更新后的估计值淹没您的后端
,没有用户会看到这些估计值。


我们只实际更新每10个除法运算的进度:

`` python
只实际更新每10个运算的后端进度
更新频率=10
对于计数,枚举中的除数(zip(分子,分母)):
分子,分母=除数
结果。附加(分子/分母)
让我们让每个人都知道我们是如何做的
自我。更新进展(计数,除数到除数,更新频率=10)
````


您的[任务代理](http://celeri.github.com/celeri/configuration.html代理url)
刚刚起来就死了(我在看您,老版本的rabbitmq)。
正在生产中,
使用死后端直接调用"delay()"
将抛出一个错误,该错误根据您实际使用的后端而有所不同。
如果代理关闭,您可能不想只给用户一个500页的通用页面,
处理这种例外情况并不有趣,每个地方都可能使用芹菜。
Jobtastic支持您。

_或者"eager"和"delay"或"fail"方法来处理一个死后端,并做一些对生产更友好的事情。

`如果有人想提交一个拉取请求,这是非常重要的实现,
并且完全可以修复。



它只是继续执行并在当前进程中运行任务,然后跳过将任务发送给工作者的过程。
您将得到一个漂亮的闪亮的"急切结果"对象,
它的行为与您期望的"asyncResult"一样。
如果您的任务实际上只需要几秒钟就可以运行,
这可能比向用户发送错误消息要好。


这实际上会生成一个表示失败的任务结果。
这意味着客户端代码可以像处理任何其他失败的任务一样处理它并为用户做一些好事。
可能会给他们发送一个水果篮?

对于可能需要一段时间
或消耗大量RAM的任务,使用此方法可能比"delay"或"eager"更好,因为您不想让资源问题变得更糟。

是"delay_或_eager()"的一个版本,它公开了"apply_async()"的调用签名


服务器端,
但是jobtastic最大的好处是面向用户的有用反馈。
这意味着在浏览器中使用ajax处理状态检查。

最简单的滚动方式是使用我们的姊妹项目,
[jquery芹菜](https://github.com/policyStat/jquery芹菜)。
它包含jquery插件,可帮助您:
*轮询任务状态并处理结果
*使用来自"progress"状态的信息显示进度条。
*使用[数据表](http://www.datatables.net/)。


一般模式是使用taskID轮询url
(例如django芹菜
[任务状态视图](https://github.com/celeri/django芹菜/blob/master/djaceleri/url.py l25))
,以获取json状态信息
,然后处理可能的状态以保持用户通知。

[jquery芹菜](https://github.com/policyStat/jquery芹菜/blob/master/src/celeriy.js)
jquery插件可能仍然很有用,作为参考,
即使您是自己开发的。
一般来说,您需要处理以下情况:

仍在等待工作进程。
显示"等待任务开始"之类的内容通常很有用。



"剩余时间":300
}
```

"进度百分比"是介于0和100之间的数字。
如果百分比为0,最好给出不同的消息,
因为剩余时间估计值可能尚未得到很好的校准。

"剩余时间"是估计剩余的秒数。
如果没有好的估计值,则该值将为"-1"。

现在是显示结果的时候了。

y一条有用的错误消息
(如果希望用户纠正问题),
或要求用户重试其任务。


这可能是由任意数量的应用程序错误引起的。
通常,如果发生这种情况,您可能需要重试,
,但如果这种情况持续存在,您需要向用户提供反馈。

`文件,
,但我们正在研究支持"tox.ini"中定义的所有内容的
([issue 33](https://github.com/policystat/jobtastic/issues/33))

您可以使用以下命令对受支持的组合运行测试:

$pip install tox
$tox-e py27-django1.8.x-djangocellery3.1.x-cellery3.1.x



这绝对是一个[错误](https://github.com/policystat/jobtastic/issues/15)。
特别是如果您将jobtastic与烧瓶一起使用,
我们希望请求拉取。



[jobtasticmixins](https://github.com/abbasovalex/jobtasticmixins)
救命!

jobtasticmixins提供了一个"avgtimeredis"mixin
,它将持续日期存储在redis后端。
然后它会自动使用存储的历史数据来计算估计值。
有关详细信息,
在github上查看[jobtasticmixins](https://github.com/abbasovalex/jobtasticmixins)


\

是的。越来越多。

###在撰写本文时,最新支持的kombu版本(含芹菜4.x)是
4.0.2。
这是由于
无效的问题或较新版本kombu的代理暂时中断造成的。` rabbitmq`在运行测试时应该在后台运行。



那么,当前支持的与jobtastic一起工作的唯一方法是将memcached作为"芹菜结果"后端。

感谢@rhunwicks,情况不再是这样了!

现在选择的缓存具有以下优先级:

*如果芹菜appconfig具有"jobtastic"缓存设置并且它是有效的缓存,请使用它
*如果安装了django,则:
-如果设置是有效的django缓存项,然后使用它。
-如果设置为空,则使用默认缓存
*如果安装了werkzeug,则:
-如果设置是有效的芹菜memcache或redis后端,则使用它。
-如果设置为空,且默认芹菜结果后端是memcache或redis,然后使用这个

[政策统计](http://www.policystat.com)
一直在内部使用
,并决定开放源码,希望对其他人有用。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在通配符泛型类型和泛型类型之间未经检查的强制转换   java Eclipse SWT Hello world教程:无法将显示解析为类型   java如何向远程用户发送注销消息?   java RDD之后的空文件是什么。保存ASTEXTFILE?   用户界面在java中创建一个htmljs UI GCalendar   Java多个哈希映射指向同一个键   Java Dowhile循环不工作?   oraclejava类。组织。阿帕奇。梁sdk。util。UserCodeException:java。sql。SQLException:无法创建PoolableConnectionFactory   java是org类型。日食用户界面。文本编辑器。*看不见   java有没有从弹出窗口复制eclipse中变量值的插件或快捷方式?   java getSubimage为我提供了期望值null   java我想让它变得更简单   swing AWTEventQueue0一直在运行,java中的程序变得非常慢   java Solr实例化类时出错:自定义类   java将ListView适配器移植到RecyclerView适配器   c#测试混合web和桌面应用程序的安全性