2016-11-04 6 views
0

У меня есть три сервера, которые запускают мою программу, и на каждом сервере есть восемь работников сельдерея, чтобы получить задание от redis. То есть задача сервера сельдерея может выполняться другим сервером.Работник не может получить новую вставку данных в mysql в задачу колба сельдерея

В каждом сервере: вносить изменения и задачи вызова

... 
    try: 
     db.session.commit() 
    except Exception as e: 
     current_app.logger.error(str(e)) 
     db.session.rollback() 
     if not ci_existed: # only add 
      self.delete(ci.ci_id) 
     return abort(500, "add CI error") 
    his_manager = CIAttributeHistoryManger() 
    his_manager.add(ci.ci_id, histories) 
    ci_cache.apply_async([ci.ci_id], queue="async") 
    # add bj ci 
    add_ci_bj.apply_async([ci_type.type_name, None, ci.ci_id], queue="async") 
    return ci.ci_id 

функция задачи

@celery.task(name="xxxxxxx", queue="async") 
def add_ci_bj(ci_type, first_id, second_id): 
    param, status = lib.ci.CIManager().get_relations(first_id, second_id, is_async=True) 
    ... 

функция в задаче

def get_relations(self, first_id, second_id, is_async=False): 
    start = time.clock() 
    try: 
     second = self.get_ci_by_id(second_id, need_children=False) 
    except Exception as e: 
    return None, "get ci by id error: first %s, second %s, e %s, is_async:%s" % \ 
      (first_id, second_id, e, is_async) 
    ... 

Я вставляю данные и передаю MySQL и вызываю задачу add_ci_bj, но я не могу получить данные по second_id, я не могу понять, кто-нибудь может помочь?

ответ

0

получил ответ, закройте сеанс перед вызовом на другом сервере. Такие как:

@celery.task(name="xxxxxxx", queue="async") 
def add_ci_bj(ci_type, first_id, second_id): 
    db.session.Close() 
    param, status = lib.ci.CIManager().get_relations(first_id, second_id, is_async=True) 
    ...