私は自分のアプリでドロップボックスとセロリを組み合わせました。これにより、ユーザーがドロップボックスを接続している場合、ユーザーが自分の写真を保存できるようになります。
コードを書きましたが、これが無限ループに陥り、システムが停止するのではないかと心配しています。
私が利用している API では、一度に 60 枚の写真しか許可されず、ページネーションが提供されます。
これが私の tasks.py ファイルのコピーです。これは実際には正常に動作しますが、正しいことを行っており、システムにあまり影響を与えていないことを確認したいと思います。
class DropboxUsers(PeriodicTask):
run_every = timedelta(hours=4)
def run(self, **kwargs):
logger = self.get_logger(**kwargs)
logger.info("Collecting Dropbox users")
dropbox_users = UserSocialAuth.objects.filter(provider='dropbox')
for db in dropbox_users:
...
...
...
sync_images.delay(first, second, third_argument)
return True
@task(ignore_result=True)
def sync_images(token, secret, username):
"""docstring for sync_images"""
logger = sync_images.get_logger()
logger.info("Syncing images for %s" % username)
...
...
...
...
feed = api.user_recent_media(user_id='self', count=60)
images = feed[0]
pagination = feed[1]
for obj in images:
### STORE TO DROPBOX
...
...
...
response = dropbox.put_file(f, my_picture, overwrite=True)
### CLOSE DB SESSION
sess.unlink()
if pagination:
store_images.delay(first, second, third, fourth_argument)
@task(ignore_result=True)
def store_images(token, secret, username, max_id):
"""docstring for sync_images"""
logger = store_images.get_logger()
logger.info("Storing images for %s" % username)
...
...
...
...
feed = api.user_recent_media(user_id='self', count=60, max_id=max_id)
images = feed[0]
try:
pagination = feed[1]
except:
pagination = None
for obj in images:
### STORE TO DROPBOX
...
...
...
response = dropbox.put_file(f, my_picture, overwrite=True)
### CLOSE DB SESSION
sess.unlink()
if pagination:
### BASICALLY RESTART THE TASK WITH NEW ARGS
store_images.delay(first, second, third, fourth_argument)
return True
あなたの専門知識は大歓迎です。