PEP 8状态:
Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.
但是,如果我要导入的类/方法/函数只由子进程使用,那么在需要时进行导入肯定更有效吗?我的代码基本上是:
p = multiprocessing.Process(target=main,args=(dump_file,))
p.start()
p.join()
print u"Process ended with exitcode: {}".format(p.exitcode)
if os.path.getsize(dump_file) > 0:
blc = BugLogClient(listener='http://21.18.25.06:8888/bugLog/listeners/bugLogListenerREST.cfm',appName='main')
blc.notifyCrash(dump_file)
main()是主应用程序。这个函数需要大量的导入才能运行,这些导入占用一些ram空间(+/-35MB)。当应用程序在另一个进程中运行时,导入在pep8之后进行了两次(一次由父进程执行,另一次由子进程执行)。还应该注意的是,由于父进程正在等待查看应用程序是否崩溃并留下exitcode(这要归功于faulthandler),所以只应调用一次该函数。所以我在main函数中对导入进行了如下编码:
^{pr2}$而不是:
import shutil
import locale
import faulthandler
from PySide.QtCore import Qt
from PySide.QtGui import QApplication, QIcon
def main(dump_file):
有没有一种“标准”的方法来处理使用多处理完成的导入?在
附言:我看过这个sister question
“标准”方法是政治公众人物第八届会议报告的方法。这就是pep8的作用:Python编码参考指南。在
但总有例外。这个案子就是其中之一。在
由于Windows不克隆父进程的内存,因此在生成子进程时,子进程必须重新导入所有模块。Linux以一种更优化的方式处理进程,避免了类似的问题。在
我不熟悉Windows内存管理,但我认为这些模块是共享的,不会加载两次。您可能看到的是这两个进程的虚拟内存,而不是物理进程。在物理内存上,只应加载模块的一个副本。在
是否遵循政治公众人物第八条由你决定。当资源成为约束时,代码需要进行调整。如果不需要的话,不要过度优化代码!那是一个错误的方法。在
相关问题 更多 >
编程相关推荐