GVKun编程网logo

如何从脚本/模块__main__启动Celery worker?(如何启动脚本命令?)

9

本文将带您了解关于如何从脚本/模块__main__启动Celeryworker?的新内容,同时我们还将为您解释如何启动脚本命令?的相关知识,另外,我们还将为您提供关于001if__name__=="_

本文将带您了解关于如何从脚本/模块__main__启动Celery worker?的新内容,同时我们还将为您解释如何启动脚本命令?的相关知识,另外,我们还将为您提供关于001 if __name__ == "__main__" 的解析、if __main__=="__main__" 作用解读、if __name__ == "__main__" 用法、if __name__ == "__main__" 的作用的实用信息。

本文目录一览:

如何从脚本/模块__main__启动Celery worker?(如何启动脚本命令?)

如何从脚本/模块__main__启动Celery worker?(如何启动脚本命令?)

我已经Celery在模块中定义了一个应用程序,现在我想从其模块中的同一模块启动worker __main__,即通过使用python-m而不是celery从命令行运行该模块。我尝试了这个:

app = Celery(''project'', include=[''project.tasks''])# do all kind of project-specific configuration# that should occur whenever this module is importedif __name__ == ''__main__'':    # log stuff about the configuration    app.start([''worker'', ''-A'', ''project.tasks''])

但是现在Celery认为我正在运行没有参数的工作程序:

Usage: worker <command> [options]Show help screen and exit.Options:  -A APP, --app=APP     app instance to use (e.g. module.attr_name)[snip]

用法消息是您从那里得到的celery --help,好像没有得到命令一样。我也尝试过

app.worker_main([''-A'', ''project.tasks''])

但这抱怨-A未被认可。

那么我该怎么做呢?或者,如何将回调传递给工作程序以使其记录有关其配置的信息?

答案1

小编典典

根据Django-Celery模块中的代码,您可以尝试执行以下操作:

from __future__ import absolute_import, unicode_literalsfrom celery import current_appfrom celery.bin import workerif __name__ == ''__main__'':    app = current_app._get_current_object()    worker = worker.worker(app=app)    options = {        ''broker'': ''amqp://guest:guest@localhost:5672//'',        ''loglevel'': ''INFO'',        ''traceback'': True,    }    worker.run(**options)

001 if __name__ ==

001 if __name__ == "__main__" 的解析

当你打开一个.py 文件时,经常会在代码的最下面看到 if __name__ == ''__main__'':, 现在就来介 绍一下它的作用:

    模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下,__name__ 的值将是一个特别缺省 "__main__"。

--------------------------------------------------------------------------------------

在 cmd 中直接运行.py 文件,则__name__的值是 ''__main__'';

而在 import 一个.py 文件后,__name__的值就不是 ''__main__'' 了;

从而用 if __name__ == ''__main__'' 来判断是否是在直接运行该.py 文件

如:

#Test.py

class Test:

    def __init(self):pass

    def f(self):print ''Hello, World!''

if __name__ == ''__main__'':

    Test().f()

#End

 

你在 cmd 中输入:

C:>python Test.py

Hello, World!

说明:"__name__ == ''__main__''" 是成立的

 

你再在 cmd 中输入:

C:>python

>>>import Test

>>>Test.__name__                #Test 模块的__name__

''Test''

>>>__name__                       #当前程序的__name__

''__main__''

无论怎样,Test.py 中的 "__name__ == ''__main__''" 都不会成立的!

所以,下一行代码永远不会运行到!

if __main__==

if __main__=="__main__" 作用解读

在大多数编排得好一点的脚本或者程序里面都有这段 if __name__ == ''main'': ,虽然一直知道他的作用,但是一直比较模糊,收集资料详细理解之后与打架分享。

   1、这段代码的功能

   一个 python 的文件有两种使用的方法,第一是直接作为脚本执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == ''main'': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == ''main'': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。

  举个例子,下面在 test.py 中写入如下代码:

1 print "I''m the first."
2 if __name__=="__main__":
3      print "I''m the second."

并直接执行 test.py,结果如下图,可以成功 print 两行字符串。即,if __name__=="__main__": 语句之前和之后的代码都被执行。

python脚本测试


然后在同一文件夹新建名称为 import_test.py 的脚本,只输入如代码:

import test
执行 import_test.py 脚本,输出结果如下:
 
if __name__=="__main__"演示

只输出了第一行字符串。即,if __name__=="__main__": 之前的语句被执行,之后的没有被执行。

   2、运行的原理

 每个 python 模块(python 文件,也就是此处的 test.py 和 import_test.py)都包含内置的变量__name__, 当运行模块被执行的时候,__name__等于文件名(包含了后缀.py);如果 import 到其他模块中,则__name__等于模块名称(不包含后缀.py)。而 “__main__” 等于当前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时,__name__ == ''main'' 结果为真。

 同样举例说明,我们在 test.py 脚本的 if __name__=="__main__": 之前加入 print __name__,即将__name__打印出来。文件内容和结果如下,

python脚本

  可以看出,此时变量__name__的值为 "__main__";
  再执行 import_test.py,模块内容和执行结果如下:

 __name__变量

  此时,test.py 中的__name__变量值为 test,不满足__name__=="__main__" 的条件,因此,无法执行其后的代码。

 

 

转自:http://www.dengfeilong.com/post/60.html

如有侵权,请联系删除,谢谢

if __name__ ==

if __name__ == "__main__" 用法

  • 每一个模块(py 文件)都有个默认的__name__参数,这个参数默认值为__main__;

  • 只有在被其他模块 A(py 文件)调用的时候,这个被调用模块 B 的__name__发生了改变,改变成了 A 的文件(模块)名;

  • 也就是说,如果是外部引用一个模块,那么该模块的 if __name__ == "__main__" 中的语句将不会运行。


if __name__ ==

if __name__ == "__main__" 的作用

作用:当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。

例子:

# file one.py
def func():
    print("func() in one.py")

print("top-level in one.py")

if __name__ == "__main__":
    print("one.py is being run directly")
else:
    print("one.py is being imported into another module")

# file two.py
import one

print("top-level in two.py")
one.func()

if __name__ == "__main__":
    print("two.py is being run directly")
else:
    print("two.py is being imported into another module")

如果你执行one.py文件,

python one.py
会输出:

top-level in one.py
one.py is being run directly
如果你执行two.py文件,

python two.py
会输出:

top-level in one.py
one.py is being imported into another module
top-level in two.py
func() in one.py
two.py is being run directly

 总结:当模块导入时 if __name__ == "__main__" 代码块不被执行,写 if __name__ == "__main__" 是为了防止模块导入,导致又重新运行了一遍导入的模块的代码。

关于如何从脚本/模块__main__启动Celery worker?如何启动脚本命令?的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于001 if __name__ == "__main__" 的解析、if __main__=="__main__" 作用解读、if __name__ == "__main__" 用法、if __name__ == "__main__" 的作用的相关信息,请在本站寻找。

本文标签: