我使用芹菜+ Redis与Django Rest API在我的本地主机上运行一个分类任务如何从Axios帖子获取数据。现在我试图将其部署到谷歌云,我没有找到一个明确的方式运行在App Engine复述和芹菜,我听说过谷歌任务队列,但是我没有找到一种方法,将它添加到一个视图和三角函数调用视图时,那么我可以创建一个函数来调用这个谷歌云任务,我对芹菜或者只是有一个想法在怎么做这些是我的代码:
from celery import shared_task
from celery_progress.backend import ProgressRecorder
from snakeimage.models import Prediction,UploadedSnake,SnakeClass
from snakeimage.classification_codes.classification_codes.prediction_func import predict_classes
#import json
#import time
#from django.conf import settings
#from google.cloud import tasks_v2beta3
#from google.protobuf import timestamp_pb2
@shared_task(bind=True)
def image_progress(self,image_path, X, Y, metadata,image_id):
progress_recorder = ProgressRecorder(self,)
predictions = predict_classes(image_path, X, Y, metadata)
print(predictions)
for prediction in predictions:
print(prediction[0])
image = UploadedSnake.objects.get(id=image_id)
class_name = SnakeClass.objects.get(index=(prediction[0]+1))
print('>>>>>>>>>>>>>>>>>>>>>',prediction[1])
Prediction.objects.create(image=image,class_name=class_name,predict_percent=prediction[1])
progress_recorder.set_progress( 1, 3, description='Prediction Result Status')
return True
我把它命名为:
task = image_progress.delay(image_path=image_path, X=X, Y=Y, metadata=0, image_id=image_id)
谢谢你的帮助。
[编辑1]
很抱歉回复晚了,我可以让它在本地工作与Django-cloud-task但在登台服务器它不工作,当我尝试从我的机器远程连接到我创建的谷歌云任务队列,我得到这个错误,它试图发送它7次:googleapiclient.errors。HttpError:
我做了github中提到的一切,他们没有选项来添加一些API密钥来认证,所以有人知道如何解决这个问题,这些是我的代码:设置:
DJANGO_CLOUD_TASKS_EXECUTE_LOCALLY = False
# If False, running `.execute()` on remote task will simply log the
task data instead of adding it to
# the queue. Useful for debugging. Default: True
DJANGO_CLOUD_TASKS_BLOCK_REMOTE_TASKS = True
PROJECT_NAME = "project"
QUEUE_REGION = "region"
QUEUE_NAME = "queue"
DJANGO_CLOUD_TASKS_HANDLER_SECRET = 'random secret key'
DJANGO_CLOUD_TASKS = {
'project_location_name': 'projects/{project}/locations/region',
'task_handler_root_url': '/_tasks/',
}
task.py:
from celery import shared_task
#from celery_progress.backend import ProgressRecorder
from snakeimage.models import Prediction,UploadedSnake,SnakeClass
from
snakeimage.classification_codes.classification_codes.prediction_func
import predict_classes
#from AINature.settings import DJANGO_HANDLER_SECRET
import json
import time
from django.conf import settings
from google.cloud import tasks_v2beta3
from google.protobuf import timestamp_pb2
from django_cloud_tasks.decorators import task
@task(queue='default')
def example_task(request, p1, p2):
print(p1, p2)
print("lezgooow >>>>>>>>>>>>>>>"+p1)
print(request.task_id)
def prediction_task(request,image_path, X, Y, metadata,image_id):
print("what is going ooon")
#progress_recorder = ProgressRecorder(self, )
predictions = predict_classes(image_path, X, Y, metadata)
print(predictions)
for prediction in predictions:
print(prediction[0])
image = UploadedSnake.objects.get(id=image_id)
class_name = SnakeClass.objects.get(index=(prediction[0] + 1))
print('>>>>>>>>>>>>>>>>>>>>>', prediction[1])
Prediction.objects.create(image=image, class_name=class_name,
predict_percent = prediction1)# progress_recorder。set_progress(1,3, description='预测结果状态')还真
当我把django_cloud_tasks_execute_local = True时,所有的东西都正确运行,但是当我关闭它时,它会抛出我提到的错误。这个链接指向Django-cloud-task github: this link
芹菜和云任务都是任务队列,但实现方式不同,因此没有直接的方法将芹菜转换为云任务逻辑。这意味着如果你只使用云任务服务会更容易。我建议在迁移之前研究Cloud Task Client库。在GitHub链接中有一些示例可以帮助您入门。
如果你还想使用芹菜,你需要弄清楚如何通过HTTP请求触发工人,因为应用引擎标准只接受HTTP请求。
你可以使用其他服务选项,Compute Engine和App Engine Flex,在那里你可以实现你想要的设置。