我需要将某个django站点实例的所有任务路由到某个队列.我的设置如下:
DJANGO_SETTINGS_MODULE不同的CELERY_DEFAULT_QUEUE设置运行.在"芹菜服务器"上,我通过主管(简化conf)运行多个工作器实例:
[program:production_queue]
environment=PYTHONPATH=/pth/to/src/:/pth/to/site-packages/,DJANGO_SETTINGS_MODULE=website.settings.production
command=/pth/to/python celery -A website.celery worker --events --queues myserver --loglevel WARNING --concurrency 4 -n production@celery.myserver.nl
[program:staging_queue]
environment=PYTHONPATH=/pth/to/src/:/pth/to/site-packages/,DJANGO_SETTINGS_MODULE=website.settings.staging
command=/pth/to/python celery -A website.celery worker --events --queues myserver_staging --loglevel WARNING --concurrency 1 -n staging@celery.myserver.nl
[program:development_queue]
environment=PYTHONPATH=/pth/to/src/:/pth/to/site-packages/,DJANGO_SETTINGS_MODULE=website.settings.development
command=/pth/to/python celery -A website.celery worker --events --queues myserver_development --loglevel INFO --concurrency 1 -n development@celery.myserver.nl
Run Code Online (Sandbox Code Playgroud)
这有效,检查:
$ celery -A website.celery inspect activeues
-> production@celery.myserver.nl: OK
* {u'exclusive': False, u'name': u'myserver', u'exchange': {u'name': u'celery', u'durable': True, u'delivery_mode': 2, …Run Code Online (Sandbox Code Playgroud) 我希望能够单击一个对象,并将其缩放到画布视口中的边界框.我该如何做到这一点?请参阅http://jsfiddle.net/tinodb/qv989nzs/8/了解我想要的工作.
Fabricjs的画布有zoomToPoint方法(文档说的是:) Sets zoom level of this canvas instance, zoom centered around point,但这并不是给定点的中心,但它确实适用于滚动缩放.见http://jsfiddle.net/qv989nzs/
我尝试了其他几种方法,比如使用canvas.setViewportTransform:
// centers a circle positioned at (200, 150)??
canvas.setViewportTransform([2, 0, 0, 2, -250, -150])
Run Code Online (Sandbox Code Playgroud)
但我找不到最后两个参数setViewportTransform与对象位置之间的关系.
(顺便说一句,另一个问题是第一个示例小提琴,缩放仅适用于第一次点击.为什么会这样?)
我们根据用户输入(称为“系统”)对地理数据进行了一些计算。有时一个系统需要10个位置来进行计算,有时需要1000多个位置。一个位置大约需要1秒钟来计算,希望我们将来可以加快速度。目前,我们通过在Celery工作者中使用Pool(来自billiard)多处理来实现此目的。这样做的原因是它100%地利用了所有内核,但是存在两个问题:
pipe可能与子进程有关)会导致工作人员在达到最大打开文件数限制时挂起(已调查,但在工作一天以上后仍未找到解决方案)为了解决这些问题,我可以将每个计算作为单独的Celery任务运行。但是,我们还希望为我们的用户“合理地”安排这些计算,以便:
使用小型系统(例如<50个位置)的用户不必等到大型系统(> 1000个位置)完成。系统越大,对用户而言增加的等待时间就越少(无论如何,他们正在做其他事情,并且可以获得通知)。因此,这类似于加权公平排队 。
我找不到能够实现这种优先级排序的分布式任务运行器。我想念一个吗?我查看了Celery,RQ,Huey,MRQ,Pulsar Queue等,以及诸如Luigi和Pinball之类的数据处理管道,但似乎没有一个能够轻松实现这一点。
其中大多数建议通过为更高优先级的队列添加更多工作器来创建优先级。但是,这将不起作用,因为工作人员将开始争取CPU时间。(RQ通过先清空完整的第一个传入队列,然后再移动到下一个队列来做不同的操作)。
我想可以运行一个多处理程序,每个CPU有一个进程,以WFQ方式从多个Redis列表中获取,每个Redis列表都是一个特定的队列。
这是正确的方法吗?当然,要使队列配置具有动态性(例如,也将其存储在Redis中,并在每对已处理的任务中重新加载它),并进行事件监视以获取洞察力,还有很多工作要做。
其他想法:
还有其他建议吗?