我有一个django-celene视图,它执行特定的任务,并在任务成功完成后将其写入数据库。
我在做这个:
result = file.delay(password, source12, destination)
而且,
if result.successful() is True:
#writes into database
但在任务完成执行后,它不会进入if条件。我试过result.ready()
,但没有成功。
编辑:上面的行在同一视图中:
def sync(request):
"""Sync the files into the server with the progress bar"""
choice = request.POST.getlist('choice_transfer')
for i in choice:
source12 = source + '/' + i
start_date1 = datetime.datetime.utcnow().replace(tzinfo=utc)
start_date = start_date1.strftime("%B %d, %Y, %H:%M%p")
basename = os.path.basename(source12) #Get file_name
extension = basename.split('.')[1] #Get the file_extension
fullname = os.path.join(destination, i) #Get the file_full_size to calculate size
result = file.delay(password, source12, destination)
if result.successful() is True:
#Write into database
e:#写入数据库
-
当您调用
file.delay
时,cerele会在稍后的某个时间点将要在后台运行的任务排队。 -
如果您立即检查
result.successful()
,它将为false,因为任务尚未运行。
如果您需要连锁任务(一个接一个地开火(,请使用Celery的工作流解决方案(在本例中为连锁(:
def do_this(password, source12, destination):
chain = file.s(password, source12, destination) | save_to_database.s()
chain()
@celery.task()
def file(password, source12, destination):
foo = password
return foo
@celery.task()
def save_to_database(foo):
Foo.objects.create(result=foo)