我使用的應用程序引擎與python使用排隊的任務處理列表。如何確保列表中的每個值僅使用一次?
我有日常任務要做的值列表。這些值存儲在在目標物業的「項目」值:
myproject1.targets=['foo','bar','foo2','bar2','foo3','bar3','foo4','bar4','foo5','bar5']
我的目標是要排隊的URL電話:url_to_my_worker
每個值,與值作爲參數。
我目前在我的數據庫中只有一個項目對象。
我跑schedule_daily_projects_tasks基本上排入schedule_daily_profile_tasks每個配置文件對象
class schedule_daily_projects_tasks(webapp.RequestHandler):
def post(self):
key=self.request.get('key')
pro=project.get(key)
profiles=my_profile.gql("WHERE project=:1",pro)
logging.info(profiles)
for profile in profiles:
taskqueue.add(url='/control/schedule_daily_profile_tasks', params={'key': profile.key()})
然後運行 'schedule_daily_profile_tasks' 爲每一個配置文件。
class schedule_daily_profile_tasks(webapp.RequestHandler):
def post(self):
key=self.request.get('key')
profile=my_profile.get(key)
pro=profile.project
for i in range(1, 6):
now=datetime.now()
tim=datetime(year=now.year, month=now.month, day=now.day, hour=8+i)
screen_name=pro.targets.pop()
taskqueue.add(url='/url_to_my_worker', params={'profk': key, 'screen_name':screen_name}, eta=tim)
pro.put()
比方說,我有我的數據庫5個配置文件對象:配置文件1,以規範5 所以,如果一切順利的井,我應該有排隊的URL「/ url_to_my_worker」 5個任務,用參數:
1) params={'profk': profile1.key(), 'screen_name':'bar5'}
2) params={'profk': profile2.key(), 'screen_name':'foo5'}
3) params={'profk': profile3.key(), 'screen_name':'bar4'}
4) params={'profk': profile4.key(), 'screen_name':'foo4'}
5) params={'profk': profile5.key(), 'screen_name':'bar3'}
但是,相反,我得到:
1) params={'profk': profile1.key(), 'screen_name':'bar5'}
2) params={'profk': profile2.key(), 'screen_name':'bar5'}
3) params={'profk': profile3.key(), 'screen_name':'bar5'}
4) params={'profk': profile4.key(), 'screen_name':'bar5'}
5) params={'profk': profile5.key(), 'screen_name':'bar5'}
相信任務跑的太快,所以N N°1°前2開始具有 「突出」。因此myproject1.targets具有相同的值。
如何確保列表中的每個值僅被使用一次?
非常感謝
我建議閱讀以下IBM文章:www.ibm.com/developerworks/aix/library/au-threadingpython/ – 2012-07-15 14:58:25
那麼,這將建議使用Pull隊列schedule_daily_profile_tasks,以便每個任務只在前一個任務完成時才啓動? – user375348 2012-07-15 15:17:50
不一定。隊列的第一個示例支持在同一隊列上運行的多個「工作」線程。 – 2012-07-15 15:20:07