本文将带您了解关于如何从脚本/模块__main__启动Celeryworker?的新内容,同时我们还将为您解释如何启动脚本命令?的相关知识,另外,我们还将为您提供关于001if__name__=="_
本文将带您了解关于如何从脚本/模块__main__启动Celery worker?的新内容,同时我们还将为您解释如何启动脚本命令?的相关知识,另外,我们还将为您提供关于001 if __name__ == "__main__" 的解析、if __main__=="__main__" 作用解读、if __name__ == "__main__" 用法、if __name__ == "__main__" 的作用的实用信息。
本文目录一览:- 如何从脚本/模块__main__启动Celery worker?(如何启动脚本命令?)
- 001 if __name__ == "__main__" 的解析
- if __main__=="__main__" 作用解读
- if __name__ == "__main__" 用法
- if __name__ == "__main__" 的作用
如何从脚本/模块__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__ == "__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__=="__main__" 作用解读
在大多数编排得好一点的脚本或者程序里面都有这段 if __name__ == ''main'': ,虽然一直知道他的作用,但是一直比较模糊,收集资料详细理解之后与打架分享。
1、这段代码的功能
一个 python 的文件有两种使用的方法,第一是直接作为脚本执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == ''main'': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == ''main'': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。
举个例子,下面在 test.py 中写入如下代码:
|
并直接执行 test.py,结果如下图,可以成功 print 两行字符串。即,if __name__=="__main__": 语句之前和之后的代码都被执行。
然后在同一文件夹新建名称为 import_test.py 的脚本,只输入如代码:
执行 import_test.py 脚本,输出结果如下:

只输出了第一行字符串。即,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__打印出来。文件内容和结果如下,
可以看出,此时变量__name__的值为 "__main__";
再执行 import_test.py,模块内容和执行结果如下:
此时,test.py 中的__name__变量值为 test,不满足__name__=="__main__" 的条件,因此,无法执行其后的代码。
转自:http://www.dengfeilong.com/post/60.html
如有侵权,请联系删除,谢谢
if __name__ == "__main__" 用法
每一个模块(py 文件)都有个默认的__name__参数,这个参数默认值为__main__;
只有在被其他模块 A(py 文件)调用的时候,这个被调用模块 B 的__name__发生了改变,改变成了 A 的文件(模块)名;
也就是说,如果是外部引用一个模块,那么该模块的 if __name__ == "__main__" 中的语句将不会运行。
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__" 的作用的相关信息,请在本站寻找。
本文标签: