2014-02-25 2 views
1

У меня есть небольшое приложение с бэкэндом appengine.
Я хочу объединить дубликаты в моей базе данных и делает это в TaskQueue:appengine задачи работают в разработке, но не на сервере

class MergeDuplicatesHandler(write_page.Handler): 
     def get(self): 
      self.render("mergeduplicateshandler.html") 
     def post(self): 
      adminpassword = self.request.get("adminpassword") 
      if adminpassword == secret.ADMINPASSWORD: 
       # Add the task to the default queue. 
       taskqueue.add(url='/merge_duplicates', params={'adminpassword': adminpassword}) 

       self.redirect('/') 
      else: 
       self.response.out.write("Wrong password") 

    class MergeDuplicates(write_page.Handler): 
     def post(self): 
      adminpassword = self.request.get("adminpassword") 
      if adminpassword == secret.ADMINPASSWORD: 
       person_service.merge_duplicates() 

write_page.Handler является обработчиком webapp2

редактировать:

это моя merge_duplicates функция:

def merge_duplicates(): 
    people = get_all() 
    peopletodelete = [] 
    count = 0 
    for p1 in people: 
     deleted = False 
     if p1.cellphone != "" and p1.cellphone is not None: 
      for pdel in peopletodelete: 
       if(p1.key().id() == pdel.key().id()): 
        deleted = True 
      if not deleted: 
       p1people = get_people_by_cellphone(p1.cellphone) 
       if p1people: 
        for p2 in p1people: 
         if(p1.key().id() != p2.key().id()): 
          p1 = merge_person(p1,p2) 
          try: 
           insert_or_update_person(p1.firstname, 
               p1.secondfirstname, 
               p1.lastname, 
               p1.secondlastname, 
               p1.cellphone, 
               p1.shortcellphone, 
               p1.workphone, 
               p1.secondworkphone, 
               p1.homephone, 
               p1.email, 
               p1.homenumber, 
               p1.workernum, 
               p1.username, 
               p1.password) 
           peopletodelete.append(p2) 
          count = count + 1 
           # logging.info("Merge Dups Inserting: {0}".format(p1.firstname)) 
          except UnicodeDecodeError: 
           logging.error("Problem with: {0} {1}".format(p1.firstname,p1.lastname)) 
     else: 
       # logging.info("Merge Dups Deleting: {0}".format(p1.firstname)) 
       p1.delete() 
    for pdel in peopletodelete: 
     pdel.delete() 
    return count 

def merge_person(p1,p2): 
    p1.firstname = merge_person_parameter(p1.firstname,p1.last_modified,p2.firstname,p2.last_modified) 
    p1.secondfirstname = merge_person_parameter(p1.secondfirstname,p1.last_modified,p2.secondfirstname,p2.last_modified) 
    p1.lastname = merge_person_parameter(p1.lastname,p1.last_modified,p2.lastname,p2.last_modified) 
    p1.secondlastname = merge_person_parameter(p1.secondlastname,p1.last_modified,p2.secondlastname,p2.last_modified) 
    p1.cellphone = merge_person_parameter(p1.cellphone,p1.last_modified,p2.cellphone,p2.last_modified) 
    p1.shortcellphone = merge_person_parameter(p1.shortcellphone,p1.last_modified,p2.shortcellphone,p2.last_modified) 
    p1.workphone = merge_person_parameter(p1.workphone,p1.last_modified,p2.workphone,p2.last_modified) 
    p1.secondworkphone = merge_person_parameter(p1.secondworkphone,p1.last_modified,p2.secondworkphone,p2.last_modified) 
    p1.homephone = merge_person_parameter(p1.homephone,p1.last_modified,p2.homephone,p2.last_modified) 
    p1.email = merge_person_parameter(p1.email,p1.last_modified,p2.email,p2.last_modified) 
    p1.homenumber = merge_person_parameter(p1.homenumber,p1.last_modified,p2.homenumber,p2.last_modified) 
    p1.workernum = merge_person_parameter(p1.workernum,p1.last_modified,p2.workernum,p2.last_modified) 
    p1.username = merge_person_parameter(p1.username,p1.last_modified,p2.username,p2.last_modified) 
    p1.password =   merge_person_parameter(p1.password,p1.last_modified,p2.password,p2.last_modified) 
    return p1 


def merge_person_parameter(param1,modified1,param2,modified2) : 
    if not param1: 
     if param2: 
      param1 = param2 
    if param1: 
     if param2: 
      if modified1 < modified2: 
       param1 = param2 
    return param1 

Все это отлично работает в разработке на локальном хосте. Я загружаю его в приложение. Он выполняет задачу, я вижу, что она работает и ничего не делает. Это займет много времени или еще что-то?

+0

Не могли бы вы опубликовать код или описать то, что вы делаете в person_service.merge_duplicates()? – Mars

+0

просто добавил функцию дублирования слияния, она отлично работает в разработке, но ничего не делает на appengine. – dangalg

+0

Похоже, вы пытаетесь изменить хранилище данных путем повторения каждой записи, что почти всегда является плохой идеей GAE, если у вас нет крошечный набор данных. Эта задача больше подходит для MapReduce: https://developers.google.com/appengine/docs/python/dataprocessing/ – Mars

ответ

0

Вы можете добавить журналы в свой процесс и проверить журналы приложений приложений в консоли разработчика.

https://developers.google.com/appengine/articles/logging

+0

хорошая идея .. Я проверю это – dangalg

+0

Я сделал но я не вижу всех журналов, которые я вставлял. Я нашел что-то в журналах: этот запрос запустил новый процесс для вашего приложения и, таким образом, заставил ваш код приложения загружаться в первый раз. Таким образом, этот запрос может занять больше времени и использовать больше CPU, чем типичный запрос для вашего приложения. – dangalg

+0

- Вам необходимо развернуть запись в журнале, чтобы просмотреть все журналы. - «Этот запрос может потребовать больше времени» означает одну секунду дольше, а не намного больше. –

Смежные вопросы