我正在使用带有 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 个配置文件对象:profile1 到 profile5 所以如果一切顺利,我应该有 5 个任务排队到 url '/url_to_my_worker',参数:
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°2 在 n°1 “弹出”之前就开始了。因此 myproject1.targets 具有相同的值。
如何确保列表中的每个值都使用一次且仅使用一次?
非常感谢