0

Djangoで次のようなタスクがあります:

from celery import task
import subprocess, celery

@celery.task
def file(password, source12, destination):
    return subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination], 
                                    stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]

を使用して、あるサーバーから別のサーバーにファイルを転送しますrsync。ここに私の見解があります:

def sync(request):
    """Sync the files into the server with the progress bar"""
    choices = request.POST.getlist('choice') 
    for i in choices:
        new_source = source +"/"+ i 
        start_date1 = datetime.datetime.utcnow().replace(tzinfo=utc)
        source12 = new_source.replace(' ', '') #Remove whitespaces
        result = file.delay(password, source12, destination)
        result.get()
        a = result.ready()
        start_date = start_date1.strftime("%B %d, %Y, %H:%M%p")

        extension = os.path.splitext(i)[1][1:] #Get the file_extension
        fullname = os.path.join(destination, i) #Get the file_full_size to calculate size
        st = int(os.path.getsize(fullname))
        f_size = size(st, system=alternative)

更新してユーザーに表示したいデータベースのテーブルを更新したい。ファイルの転送中にテーブルを更新する必要があります。を使用してそれを行うにはどうすればよいdjango-celeryですか?

4

1 に答える 1

0

Django に関して言えば、Celery はそれほど特別なものではありません。通常どおりにデータベースを更新するだけです。考える必要があるのはトランザクションだけです。

念のため、手動コミットまたは自動コミットを使用してデータベースを更新することをお勧めします。これらの種類のステータス更新には、データベースの代わりに redis/memcached を使用することをお勧めしますが。彼らはこの目的により適しています。

于 2013-02-04T12:12:22.347 に答える