Pythonでアプリエンジンを使用しています
値のリストで行う毎日のタスクがあります。これらの値は、ターゲット プロパティの下の「プロジェクト」値に格納されます。
myproject1.targets=['foo','bar','foo2','bar2','foo3','bar3','foo4','bar4','foo5','bar5']
url_to_my_worker
私の目標は、値をパラメーターとして使用して、値ごとに url: への呼び出しをキューに入れることです。
現在、データベースにはプロジェクト オブジェクトが 1 つしかありません。
各プロファイル オブジェクトに対して基本的に schedule_daily_profile_tasks をエンキューする schedule_daily_projects_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()
データベースに profile1 から profile5 までの 5 つのプロファイル オブジェクトがあるとします。すべてがうまくいけば、5 つのタスクが「/url_to_my_worker」という URL に次のパラメーターとともにキューに登録されます。
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°1 が「ポップ」する前に n°2 が開始されます。したがって、myproject1.targets の値は同じです。
リスト内の各値が一度だけ使用されるようにするにはどうすればよいですか?
どうもありがとう