コード例 #1
0
ファイル: task.py プロジェクト: daimon99/ztq
def push_task(full_func_name, *args, **kw):
    """
    callback: 这是另外一个注册的task,在func调用完毕后,会启动这个

    加入队列::

     task_regitry.push(u'foo:echo', aaa, bb, foo='bar', 
            callback='foo:callback', callback_args=(12,32,3), callback_kw={}) 
    """
    system = kw.pop('ztq_system', 'default')
    queue_name, func_name = split_full_func_name(full_func_name)
    to_right = kw.pop('ztq_first', False)
    # 队列运行相关信息
    runtime = kw.pop('runtime', \
            {'create':int(time.time()), 'queue':queue_name})

    task = gen_task(func_name, *args, **kw)
    task_md5 = _get_task_md5(task)

    task_hash = model.get_task_hash(queue_name, system=system)

    # 因为queue队列有worker不停在监视,必须先将hash的内容push,在将queue的内容push
    task['runtime'] = runtime
    if task_hash.__setitem__(task_md5, task) == 1:
        # 如果返回值等于0, 说明task_md5已经存在
        queue = model.get_task_queue(queue_name, system=system)
        queue.push(task_md5, to_left=not to_right)
コード例 #2
0
ファイル: task.py プロジェクト: daimon99/ztq
def has_task(queue_name, task, to_front=False):
    """ 检查是否存在某个job
    在queue_name的队列上,在arg_index的位置,对于func_name, 值为arg_value 
    如果不存在,返回false, 在worker中工作,返回‘work', 队列中返回’queue'
    """
    runtime = task.pop('runtime', None)
    task_md5 = _get_task_md5(task)
    if not runtime is None: task['runtime'] = runtime

    # 检查work现在的工作
    worker_list = model.get_all_worker()
    for worker_name in worker_list:
        worker_job = model.get_job_state(worker_name)
        if not worker_job: continue
        for thread_name, job in worker_job.items():
            job.pop('runtime', '')
            job.pop('process', '')
            if _get_task_md5(job) == task_md5:
                return 'running'

    # 检查所在队列
    queue_name = queue_name 
    task_hash = model.get_task_hash(queue_name)
    if task_md5 in task_hash:
        if to_front: # 调整顺序
            task_queue = model.get_task_queue(queue_name)
            task_queue.remove(task_md5)
            task_queue.push(task_md5, to_left=False)
        return 'queue'

    return 'none'
コード例 #3
0
ファイル: task.py プロジェクト: lbnt1982/ztq
def push_task(full_func_name, *args, **kw):
    """
    callback: 这是另外一个注册的task,在func调用完毕后,会启动这个

    加入队列::

     task_regitry.push(u'foo:echo', aaa, bb, foo='bar', 
            callback='foo:callback', callback_args=(12,32,3), callback_kw={}) 
    """
    system = kw.pop('ztq_system', 'default')
    queue_name, func_name = split_full_func_name(full_func_name)
    to_right = kw.pop('ztq_first', False)
    # 队列运行相关信息
    runtime = kw.pop('runtime', \
            {'create':int(time.time()), 'queue':queue_name})

    task = gen_task(func_name, *args, **kw)
    task_md5 = _get_task_md5(task)

    task_hash = model.get_task_hash(queue_name, system=system)

    # 因为queue队列有worker不停在监视,必须先将hash的内容push,在将queue的内容push
    task['runtime'] = runtime
    if task_hash.__setitem__(task_md5, task) == 1:
        # 如果返回值等于0, 说明task_md5已经存在
        queue = model.get_task_queue(queue_name, system=system)
        queue.push(task_md5, to_left=not to_right)
コード例 #4
0
ファイル: task.py プロジェクト: lbnt1982/ztq
def has_task(queue_name, task, to_front=False):
    """ 检查是否存在某个job
    在queue_name的队列上,在arg_index的位置,对于func_name, 值为arg_value 
    如果不存在,返回false, 在worker中工作,返回‘work', 队列中返回’queue'
    """
    runtime = task.pop('runtime', None)
    task_md5 = _get_task_md5(task)
    if not runtime is None: task['runtime'] = runtime

    # 检查work现在的工作
    worker_list = model.get_all_worker()
    for worker_name in worker_list:
        worker_job = model.get_job_state(worker_name)
        if not worker_job: continue
        for thread_name, job in worker_job.items():
            job.pop('runtime', '')
            job.pop('process', '')
            if _get_task_md5(job) == task_md5:
                return 'running'

    # 检查所在队列
    queue_name = queue_name
    task_hash = model.get_task_hash(queue_name)
    if task_md5 in task_hash:
        if to_front:  # 调整顺序
            task_queue = model.get_task_queue(queue_name)
            task_queue.remove(task_md5)
            task_queue.push(task_md5, to_left=False)
        return 'queue'

    return 'none'
コード例 #5
0
ファイル: task.py プロジェクト: daimon99/ztq
 def run(self):
     """ 阻塞方式找到任务,并自动调用"""
     queue = model.get_task_queue(self.queue_name)
     while True:
         task = queue.pop()
         try:
             task_registry[task['func']](*task['args'], **task['kw'])
             if task['callback']:
                 callback_args = task.get('callback_args', ())
                 callback_kw = task.get('callback_kw', {})
                 push_task(task['callback'], *callback_args, **callback_kw)
         except Exception, e:
             print str(e)
コード例 #6
0
ファイル: task.py プロジェクト: lbnt1982/ztq
 def run(self):
     """ 阻塞方式找到任务,并自动调用"""
     queue = model.get_task_queue(self.queue_name)
     while True:
         task = queue.pop()
         try:
             task_registry[task['func']](*task['args'], **task['kw'])
             if task['callback']:
                 callback_args = task.get('callback_args', ())
                 callback_kw = task.get('callback_kw', {})
                 push_task(task['callback'], *callback_args, **callback_kw)
         except Exception, e:
             print str(e)