我一直在关注django-swingtime,django-schedule和django-agenda.
任何建议都更容易使用,如果有的话,那里有任何实用的代码示例?无法在相应的项目中找到有用的文档或示例.
我的要求是有许多事件并跟踪它们的发生,但事件是自定义的事物,例如,项目管理系统,其中在每个项目上花费了一定的时间,其中事件是任务并且事件是每个任务经常花费的时间.
在FCFS调度算法中,缺点是如果具有较高突发时间的进程P1在某些进程P2,P3 ...之前出现,具有小得多的突发时间,则平均等待时间和平均完成时间相当高.
该问题的解决方案是安排最短作业(SJF Algo).
但是如何提前计算出爆发时间?开发人员是否指定了一个公式(根据可用资源)预先计算执行作业的突发时间?
我创建了一个doWork()预定每天凌晨1点运行的功能,功能如下:
@Schedule(hour = "1", persistent = false)
public void doWork()
{
System.out.println("Starting .....\nTIME: " + System.currentTimeMillis());
System.out.println("this : " + this);
//Some code here, if-conditions and try/catch blocks. No loops
System.out.println("Exiting .....\nTIME: " + System.currentTimeMillis());
System.out.println("this : " + this);
}
Run Code Online (Sandbox Code Playgroud)
问题是这个函数不止一次运行,而不是按计划运行.
一旦我创建它,它就完全按预期运行(每天凌晨1:00:00).几天后,它开始在1:03:00运行(这没有任何意义,因为它是非持久性的,并且服务器中没有任何停机时间).之后,该功能开始运行不止一次,间隔间隔很短(秒差)
有谁知道可能导致这种情况的原因,或者告诉我我能做些什么来解决它?
[编辑]:环境细节
Application Server:WebSphere Application Server 8.5.5
IDE:Rational Application Developer 9.1
数据库管理系统:IBM DB2 10.1
这是我想要解决的问题的本质.在周末,我们有工人在托儿所照顾孩子.一个周末有16个不同的插槽可供填写.因此,对于为期4周的月份,有64个插槽可供填充.我们最多有30名托儿所工人(虽然我们需要更多.像孩子一样的人?).
编辑:每个时段都是离散的 - 它们不重叠.
目前有一个人每个月都会提出托儿所时间表.每个月根据每个人的喜好制定这个时间表是一项复杂而耗时的任务.在考虑了这个问题后,我心想,"必须有一个更好的方法!"
我注意到问题基本上是一个二分图.在婚姻问题也是一个二分图,您可以通过使用像匹配算法解决埃德蒙兹的匹配算法.
但是这假设一个节点集中的每个节点仅匹配另一个节点集中的一个节点.就我而言,每个托儿所工作者只能工作一个时间段.由于我们严重缺乏人手,这是行不通的!一群人每个月必须工作两次才能填满所有时间段.
这似乎意味着这更像是经典的"医院/居民问题".它与婚姻问题的不同之处在于,"女性"可以接受来自不止一个"男人"的"建议"(例如,医院可以接纳多个居民).在我的情况下,托儿所工人可以占用多个时间段.
呼!
现在我已经完成了设置....有没有人知道任何解释或显示这种算法的好链接?有没有更好的方法来解决这个问题?我在想它吗?我做了一个谷歌搜索"医院居民算法",并找到了研究生的论文.尔加!我毕业于CS学位并参加了AI课程......但那是6年前的事了.救命!
Aaaaany建议表示赞赏!!
我的构建路径中包含quartz 1.8.3.jar和Spring 3.0.6 jar,但是在spring + quartz调度的所有教程中出现的包都不可用.在哪里可以找到它?
"org.springframework.scheduling.quartz.JobDetailBean"
Run Code Online (Sandbox Code Playgroud) 我目前正在建立一个网站,允许我大学的学生根据他们想要的课程自动生成有效的时间表.
在开展网站工作之前,我决定解决如何有效安排课程的问题.
一些澄清:
我们大学的每门课程(我假设在其他所有大学)都包含一个或多个部分.因此,例如,微积分I目前有4个部分可用.这意味着,根据部分的数量,以及课程是否有实验室,这会极大地影响调度过程.
我们大学的课程使用主题缩写和课程代码的组合来表示.在微积分I的情况下:MATH 1110.
CRN是一个部分唯一的代码.
我所在的大学并不喜欢,这意味着男性和女性在(几乎)不同的校园里学习.我的意思几乎就是校园分为两部分.
datetime和timeranges dicts旨在减少对datetime.datetime.strptime()的调用,这是一个真正的瓶颈.
我的第一次尝试包括连续循环算法直到找到30个时间表.通过从一个输入的课程中随机选择一个部分,然后尝试从剩余的课程中放置部分来尝试构建有效的时间表来创建时间表.如果并非所有课程都符合时间表,即存在冲突,则会取消时间表并继续循环.
显然,上述解决方案存在缺陷.该算法运行时间太长,并且过于依赖随机性.
第二种算法与旧算法完全相反.首先,它使用itertools.product()生成所有可能的计划组合的集合.然后,它会遍历计划,将任何无效的计划交叉.为了确保各个部分,在验证之前调度计划组合(random.shuffle()).同样,涉及到一些随机性.
经过一些优化后,我能够让调度程序在1秒内运行,平均时间表包含5个课程.这很好,但一旦你开始添加更多课程,问题就开始了.
为了给你一个想法,当我提供一组输入时,可能的组合数量太大,以至于itertools.product()不会在合理的时间内终止,并且在此过程中会占用1GB的RAM.
显然,如果我要将其作为服务,我将需要更快,更有效的算法.在线和IRC中出现了两个:动态编程和遗传算法.
动态编程不能应用于这个问题,因为如果我正确地理解了这个概念,它会将问题分解成更小的部分,单独解决这些部分,然后将这些部分的解决方案结合在一起形成一个完整的解决方案.据我所知,这不适用于此.
至于遗传算法,我对它们了解不多,甚至无法理解如何在这种情况下应用它.我也理解GA对于一个非常大的问题空间会更有效,而且这并不是那么大.
我有什么替代品?我可以采取一种相对可以理解的方法来解决这个问题吗?或者我应该坚持我所拥有的并希望下个学期没有多少人决定参加8门课程?
我不是一个伟大的作家,所以我很抱歉这个问题含糊不清.请随时要求澄清,我会尽力帮助.
这是完整的代码.
http://bpaste.net/show/ZY36uvAgcb1ujjUGKA1d/
注意:很抱歉使用误导性标记(计划).
我是Linux设备驱动程序新手,想知道tasklet和之间的确切区别workqueue.此外,我也有以下疑虑:
- 在中断/进程上下文中运行时,哪个内核堆栈会执行中断,tasklet和workqueue?
- tasklet和workqueue的优先级是什么,我们可以修改它的优先级吗?
- 如果我实现自己的工作队列列表,我可以独立安排/优先排序吗?
我有两种任务.任务A由celerybeat每小时生成一次.它立即运行,并生成任务B的一千(或几千)个实例,每个实例都有一天的ETA.
启动时,任务A的实例运行并生成一千个B.从那以后,没有任何事情发生.我应该看到另一个A每小时运行,还有另外一千个B.但实际上我什么也看不见.
在冻结时,rabbitmqctl显示1000条消息,968准备好,32未确认.一小时后,有1001条消息,969准备好,32未确认.等等,每隔一小时就有一条新消息被归类为准备就绪.据推测,正在发生的事情是,工人正在预取32条消息但不能对它们采取行动,因为他们的ETA仍然在未来.与此同时,现在应该运行的新任务无法运行.
处理这个问题的正确方法是什么?我猜我需要多个工作人员,也许还有多个队列(但我不确定后一点).有更简单的方法吗?我试过摆弄CELERYD_PREFETCH_MULTIPLIER和-Ofail(如这里讨论的那样:http://celery.readthedocs.org/en/latest/userguide/optimizing.html )但是无法让它去.我的问题和这个问题一样:[[Django Celery]] Celery阻止做IO任务?
在任何情况下:我只能解决这个问题,因为我对任务的性质及其时间有很多了解.使用未来ETA的足够任务是否可以锁定整个系统似乎不是一个设计缺陷?如果我等待几个小时,然后杀死并重新启动工作程序,它会再次抓取前32个任务并冻结,即使此时队列中的任务已准备好立即运行.某些组件是否应该足够聪明才能查看ETA并忽略不可运行的任务?
附录:我现在认为当RabbitMQ 3.3与Celery 3.1.0一起使用时,问题是一个已知的错误.有关详细信息,请访问:https://groups.google.com/forum/#!searchin/celery-users/countdown | sort: date/accelery-users/FiAAESOzezA/499OH-pylacJ
更新到Celery 3.1.1后,事情似乎更好.任务A每小时运行一次(好吧,它有几个小时)并安排任务B的副本.这些似乎正在填补工作人员:未确认消息的数量继续增长.我必须看看它能不受限制地增长.
嗨,大家好,
我需要使用airflow来安排我的python 文件(其中包含从sql和一些连接中提取数据).我已经成功地将气流安装到我的linux服务器中,我可以使用气流网络服务器.但即使在完成文档后,我也不清楚我需要在哪里编写脚本以进行调度以及该脚本如何在airflow webserver中可用,这样我才能看到状态
就配置而言,我知道dag文件夹在我的主目录中的位置以及示例dags所在的位置.
注意:请不要将此标记为重复与如何在Airflow中运行bash脚本文件,因为我需要运行位于不同位置的python文件.