- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果我有以下代码:
def f():
print 'ok!'
import sys
sys.exit()
if __name__=='__main__':
import billiard
billiard.forking_enable(0)
p = billiard.Process( target=f)
p.start()
while p.is_alive():
pass
脚本按预期运行,打印“ok!”和结束。但是,如果我省略 if __name__=='__main__':
行并取消缩进以下行,我的机器 (OS X) 就会变得疯狂,不断产生大量的 Python 进程,直到我 killall python
。知道这里发生了什么吗?
(对于那些将此标记为重复的人,请注意,虽然另一个问题通常询问 if __name__=='__main__'
的目的,但我特别询问为什么未能在此处使用它会导致非常意外的行为)
最佳答案
您正在使用以下行禁用 fork
支持:
billiard.forking_enable(0)
这意味着库将需要生成(而不是 fork)你的子进程,并让它重新导入 __main__
模块来运行 f
,就像Windows 确实如此。如果没有 if __name__ ...
守卫,重新导入子模块中的 __main__
模块也意味着重新运行创建 billiard.Process< 的代码
,这会创建一个无限循环。
如果您启用 fork
,则不需要在子进程中重新导入,因此无论有无 if __name__ ...
守卫,一切都正常.
关于python - 为什么台球多处理模块需要 "if __name__==' __main_ _'"行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26680686/
给定一个简单的脚本,例如: #!/usr/bin/env python3 if __name__ == "__main__": print("Hello World") 如何在不执行 if _
以下这些成语(编写一个也是可执行/可运行的模块)是否具有设计模式的名称? 在 Python 中,我们也可以使用 if name == 'main': idiom 将模块编写为可执行文件: if __n
在我的 python 文件中,我有一个带有一些参数的函数,在同一个文件中,我有一个 if __name__ == "__main__" 子句,它使用一组特定的参数运行此函数(例如用户展示其功能)。就像
在一个可执行的 TCL 脚本中,我定义了一个变量,我想在另一个可执行的 TCL 脚本中导入该变量。在 Python 中,可以通过在脚本底部使用以下习语来制作组合库和可执行文件: # Library i
这个问题在这里已经有了答案: What does if __name__ == "__main__": do? (45 个答案) 关闭 8 个月前。 我看过很多关于这个的文章: if __name_
我在两个分开的文件中写了两个函数,假设是文件A.lisp 和B.lisp,这两个文件都有一些用于测试的主要程序代码,A.lisp 会调用B.lisp 中的函数。这意味着直接在 A.lisp 中使用 l
如果我有以下代码: def f(): print 'ok!' import sys sys.exit() if __name__=='__main__': import
这个问题在这里已经有了答案: What does if __name__ == "__main__": do? (45 个答案) 关闭 8 年前。 我试图理解我发现的一些读取命令行参数的代码(附在下
所以,这是我的情况。 我在 Eclipse 中使用 PyDev,在 Windows 中使用 Python 解释器版本 2.7.2。 我正在使用内置的多处理库来尝试 fork 出一堆进程来并行化一个计算
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: What does do? 我用 Python 编写脚本已经有一段时间了,我会根据需要学习更多的 Pyth
假设我有一个包含以下内容的模块: def main(): pass if __name__ == "__main__": main() 我想为下半部分编写一个单元测试(我想实现 100
在具有 __main__.py 的项目中, 而不是 # __main__.py # def main... if __name__ == "__main__": main() ...可以这样做
我有一个 unittest.TestCase 有一个非常重的设置类 如果代码作为 main 启动,我想使用模拟运行它,如果它通过导入运行,则运行完整的数据检查,如下所示: import unittes
我有一些要求,至少需要达到 80% 的线路覆盖率。我有一些文件,其中大部分代码位于 if __name__ == '__main__': 下无需测试。 我如何指示 SonarQube 从测试覆盖范围中
这个问题已经有答案了: What does if __name__ == "__main__": do? (46 个回答) 已关闭 9 年前。 另外,为什么我们要使用下划线?毕竟我将main方法定义为
我有这个文件(它没有做任何有用的工作,仅供学习): import multiprocessing,sys def parent(numproc=2): print ('at start')
我刚刚开始使用 setuptools 进行打包,似乎推荐的安装 python 脚本和一个模块的方法是指定一个调用函数名称的脚本名称,如下所示: setup( # ... entry_p
目标是有两种简单的方法来获取一些代码,比如 func.R,包含一个函数。调用 R CMD BATCH func.R 初始化函数并计算 is。在 session 中,发出 source("func.R"
我正在涉足 clojure,但在尝试确定这个常见的 python 习语的 clojure(和/或 Lisp)等价物时遇到了一些麻烦。 习语是在一个python模块的底部通常有一点测试代码,然后是运行代
有没有办法确定当前文件是否是在 Perl 源代码中执行的文件?在 Python 中,我们使用以下结构来做到这一点: if __name__ == '__main__': # This file
我是一名优秀的程序员,十分优秀!