码迷,mamicode.com
首页 > 其他好文 > 详细

tornado 排程

时间:2015-06-06 09:05:15      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

https://groups.google.com/forum/#!topic/python-tornado/KEmAg97zUg8

鉴于不是所有人都能跨越GFW,摘抄如下:

 Scheduled jobs in Tornado
7 名作者发布了 9 个帖子
	Robert Wikman 	
12/2/6
将帖子翻译为中文  
Hello,

I‘m trying to figure out how to write a scheduler to run jobs at
specific times, i.e. every day at 5 PM, in Tornado.
Is there any simple way to accomplish this?

Regards,
Robert

	Christopher Allick 	
12/2/7
将帖子翻译为中文  
not sure if this helps, but you could create a cron job that hits a webservice and setup a handler in your application.  you might want to protect the call.
- 隐藏引用文字 -

On Feb 6, 2012, at 9:34 AM, rbw wrote:

> Hello,
>
> I‘m trying to figure out how to write a scheduler to run jobs at
> specific times, i.e. every day at 5 PM, in Tornado.
> Is there any simple way to accomplish this?
>
> Regards,
> Robert
>

	bergundy 	
12/2/7
将帖子翻译为中文  
Wasn‘t planning on releasing it, but what the heck :)

https://github.com/bergundy/tornado_crontab
- 隐藏引用文字 -


On Mon, Feb 6, 2012 at 7:04 PM, Christopher Allick <chris...@gmail.com> wrote:

    not sure if this helps, but you could create a cron job that hits a webservice and setup a handler in your application.  you might want to protect the call.

    On Feb 6, 2012, at 9:34 AM, rbw wrote:

    > Hello,
    >
    > I‘m trying to figure out how to write a scheduler to run jobs at
    > specific times, i.e. every day at 5 PM, in Tornado.
    > Is there any simple way to accomplish this?
    >
    > Regards,
    > Robert
    >


	wataka 	
12/2/7
将帖子翻译为中文  
I use APscheduler, http://packages.python.org/APScheduler/


On Feb 6, 6:31 pm, Roey Berman <roey.ber...@gmail.com> wrote:
> Wasn‘t planning on releasing it, but what the heck :)
>
> https://github.com/bergundy/tornado_crontab
>
- 显示引用文字 -
	Aleksandar Radulovic 	
12/2/7
Re: [tornado] Re: Scheduled jobs in Tornado
将帖子翻译为中文  
How about just using celery? It works like a charm and its a proven
and robust solution..

- 显示引用文字 -

-- 
a lex 13 x
http://a13x.net | @a13xnet

	Jason 	
12/2/7
将帖子翻译为中文  
I‘m sorry.I don‘t know.
- 隐藏引用文字 -

On Feb 6, 10:34 pm, rbw <r...@vault13.org> wrote:
> Hello,
>
> I‘m trying to figure out how to write a scheduler to run jobs at
> specific times, i.e. every day at 5 PM, in Tornado.
> Is there any simple way to accomplish this?
>
> Regards,
> Robert
	Robert Wikman 	
12/2/7
将帖子翻译为中文  
Forgot to mention that I was at the time of my first post looking for
a solution using the Tornado built-in functionality, i.e.
PeriodCallback or add_timeout.

Didn‘t even think about using a separate module for this.

Thank you everyone.

Regards,
Robert

On Feb 6, 7:49 pm, Aleksandar Radulovic <a...@a13x.net> wrote:
> How about just using celery? It works like a charm and its a proven
> and robust solution..
>
>
>
>
>
>
>
>
>
> On Mon, Feb 6, 2012 at 7:05 PM, wataka <nhy...@googlemail.com> wrote:
> > I use APscheduler,http://packages.python.org/APScheduler/
- 显示引用文字 -
	bergundy 	
12/2/8
Re: [tornado] Re: Scheduled jobs in Tornado
将帖子翻译为中文  
@wataka - Thanks for the APScheduler link, I was gonna write tests for my crontab project but now that I found out about that project I‘m just using apscheduler.triggers.cron.CronTrigger

I posted a gist if anyone is interested.
http://tornadogists.org/1770500/
- 显示引用文字 -
	whitemice 	
12/2/11
Re: [tornado] Re: Scheduled jobs in Tornado
将帖子翻译为中文  
On Mon, 2012-02-06 at 10:05 -0800, wataka wrote:
> I use APscheduler, http://packages.python.org/APScheduler/

+1 APschedular

Actually I run APschedular in a process that uses AMQ to send messages
at designated times; then the apps/services just process the messages.

-- 
System & Network Administrator [ LPI & NCLA ]
<http://www.whitemiceconsulting.com>
OpenGroupware Developer <http://www.opengroupware.us>
Adam Tauno Williams

  

http://tornadogists.com/1770500/

import re
import itertools
import logging
 
from apscheduler.triggers.cron import CronTrigger
from tornado.ioloop import IOLoop
from datetime import datetime
 
class CronCallback(object):
    """Schedules the given callback to be called periodically.

    The callback is called according to the schedule argument.

    `start` must be called after the CronCallback is created.

    If schedule is a string it should contain 7 cron fields: (‘second‘, ‘minute‘, ‘hour‘, ‘day‘, ‘month‘, ‘year‘, ‘day_of_week‘).
    If schedule is a dict it must contain at least one of the fields above.

    >>> cron1 = CronCallback(lambda: logging.error(‘x‘), dict(seconds = 1)) # logs ‘x‘ every second
    >>> cron2 = CronCallback(lambda: IOLoop.instance().stop(), ‘*/5 * * * * * *‘) # stops ioloop every 5 seconds
    >>> cron1.start()
    >>> cron2.start()
    >>> IOLoop.instance().start()
    """
 
    _split_re  = re.compile("\s+")
    _sched_seq = (‘second‘, ‘minute‘, ‘hour‘, ‘day‘, ‘month‘, ‘year‘, ‘day_of_week‘)
 
    def __init__(self, callback, schedule, io_loop=None):
        if isinstance(schedule, basestring):
            splitted = self._split_re.split(schedule)
            if len(splitted) < 7:
                raise TypeError("‘schedule‘ argument pattern mismatch")
 
            schedule = dict(itertools.izip(self._sched_seq, splitted))
        
        self.callback = callback
        self._trigger = CronTrigger(**schedule)
        self.io_loop  = io_loop or IOLoop.instance()
        self._running = False
        self._timeout = None
 
    def start(self):
        """Starts the timer."""
        self._running = True
        self._schedule_next()
 
    def stop(self):
        """Stops the timer."""
        self._running = False
        if self._timeout is not None:
            self.io_loop.remove_timeout(self._timeout)
            self._timeout = None
 
    def _run(self):
        if not self._running: return
        try:
            self.callback()
        except Exception:
            logging.error("Error in cron callback", exc_info=True)
        self._schedule_next()
 
    def _schedule_next(self):
        if self._running:
            self._timeout = self.io_loop.add_timeout(self._next_timeout, self._run)
 
    @property
    def _next_timeout(self):
        d = datetime.now()
        return self._trigger.get_next_fire_time(d) - d
 
if __name__ == "__main__":
    import doctest
    doctest.testmod()

  

tornado 排程

标签:

原文地址:http://www.cnblogs.com/Tommy-Yu/p/4556044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!