【问题标题】:call a celery task within a Django view method?在 Django 视图方法中调用 celery 任务?
【发布时间】:2013-08-30 03:06:21
【问题描述】:

我有两个 Python 应用程序“前端”和“fv”。在我的 fv 应用程序中是我的 tasks.py 文件,在我的前端应用程序中是我的 views.py 文件来呈现我的视图。

现在我有一个视图,我可以在其中选择一些参数,通过 request.POST 获取这些参数。现在我想调用一个任务方法 FunctionRDynamic 并从我的视图表单中传递参数。

views.py 中的方法:

if request.method == 'POST':
        form1 = dataproviderInstrumentForm(request.POST)
        form2 = dynamicTimeseriesForm(request.POST)

        if form1.is_valid() or form2.is_valid(): 
            filters = form2.cleaned_data['filter']
            estimator = form2.cleaned_data['estimator']
            windowSize = form2.cleaned_data['windowSize']

            FunctionRDynamic.delay(estimator, windowSize, timeseries)

FunctionRDynamic是我在oder应用的tasks.py文件中的方法,但是这个方法不会执行。

对于我的任务,我使用芹菜。全部用 Python 编写,我使用 Django 作为 mvc 框架。

有人有建议吗?

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    据我了解,这是解决方案。在定义 celery 任务时这样做:

    @celery.task
    def file_transfer(password, source12, destination):
        # Do stuffs with paramters
    

    现在在您的views.py 中执行以下操作:

    def test(View):
        # Get the data from post
        if request.method == 'POST':
            name = request.POST['name']
            # And get all the variable you need for the tasks
    
            # Now call the task like this
            file_transfer.delay(name, 'test', 'test')
    

    【讨论】:

    • 感谢快速回答,如果我在没有 .delay 的情况下调用任务 - 作为您的解决方案,我的浏览器中出现“无法连接”错误并且我失去了连接。
    • 是的,你必须使用task_name.delay。抱歉打错了。
    • 两个问题:你有 celery 运行吗?你有消息传输后端设置吗?在 DEBUG 模式下运行 celery:./manage.py celeryd -lDEBUG 并告诉我你看到了什么错误。
    • 这是我的错,因为我还没有开始工作。谢谢你的解决方案。
    • 当然。很高兴我能帮上忙。
    猜你喜欢
    • 2019-07-02
    • 2020-12-27
    • 2020-12-18
    • 2015-09-04
    • 2017-04-04
    • 1970-01-01
    • 2013-10-14
    • 2020-12-14
    • 2011-06-19
    相关资源
    最近更新 更多