什么是python模块

Python038

什么是python模块,第1张

简而言之,在python中,一个文件(以“.py”为后缀名的文件)就叫做一个模块,每一个模块在python里都被看作是一个独立的文件。模块可以被项目中的其他模块、一些脚本甚至是交互式的解析器所使用,它可以被其他程序引用,从而使用该模块里的函数等功能,使用Python中的标准库也是采用这种方法。

multiprocessing 是一个支持使用与 threading 模块类似的 API 来产生进程的包。 multiprocessing 包同时提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了 全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。 它在 Unix 和 Windows 上均可运行。

1、multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

2、相关方法

输出结果如下:

Pool提供了一种快捷的方法,赋予函数并行化处理一系列输入值的能力,可以将输入数据分配给不同进程处理(数据并行)。下面的例子演示了在模块中定义此类函数的常见做法,以便子进程可以成功导入该模块。这个数据并行的基本例子使用了 Pool 。

将在标准输出中打印

其中:

(1)p.apply(func [, args [, kwargs]]):在一个池工作进程中执行func( args, kwargs),然后返回结果。需要强调的是:此操作并不会在所有池工作进程中并执行func函数。如果要通过不同参数并发地执行func函数,必须从不同线程调用p.apply()函数或者使用p.apply_async()

(2)p.apply_async(func [, args [, kwargs]]):在一个池工作进程中执行func( args,**kwargs),然后返回结果。此方法的结果是 AsyncResult类的实例,callback是可调用对象,接收输入参数。当func的结果变为可用时,将理解传递给callback。callback禁止执行任何阻塞操作,否则将接收其他异步操作中的结果。多进程并发!

(3)p.close():关闭进程池,防止进一步操作。如果所有操作持续挂起,它们将在工作进程终止前完成

(4)p.jion():等待所有工作进程退出。此方法只能在close()或teminate()之后调用

本章是《从到Python》系列连载的最后一章 内容较简单 主要介绍Python中模块与包的使用方法 如果你对这部分内容已经比较熟悉 就不要再浪费时间看了 写这一章只是为了整个系列完整而已 没什么新的东西(本章内容主要参考了《Python精要参考》的第八章《模块和包》)

  模块

Python的脚本都是用扩展名为py的文本文件保存的 一个脚本可以单独运行 也可以导入另一个脚本中运行 当脚本被导入运行时 我们将其称为模块(module) 模块是Python组织代码的基本方式

模块名与脚本的文件名相同 例如我们编写了一个名为Items py的脚本 则可在另外一个脚本中用import Items语句来导入它 在导入时 Python解释器会先在脚本当前目录下查找 如果没有则在sys path包含的路径中查找

在导入模块时 Python会做以下三件事

( ) 为模块文件中定义的对象创建一个名字空间 通过这个名字空间可以访问到模块中定义的函数及变量

( ) 在新创建的名字空间里执行模块文件

( ) 创建一个名为模块文件的对象 该对象引用模块的名字空间 这样就可以通过这个对象访问模块中的函数及变量 如

 import sys print sys path

如果要同时导入多个模块 可以用逗号分隔 如 import sys os

可以使用as关键字来改变模块的引用对象名 如 import os as system

也可以用from语句将模块中的对象直接导入到当前的名字空间(不创建模块名字空间的引用对象) 如 from socket import gethostname

from语句支持逗号分割的对象 也可以使用星号(*)代表模块中除下划线开头的所有对象 如 from socket import * 这是个懒省事的方法 我是经常用 不过用之前最好先搞清楚会不会覆盖当前名字空间中的函数名等 总之不是个好习惯:)

除了Python脚本(不仅限于py 还包括pyc和pyo) import语句还可以导入C或扩展(已编译为共享库或DLL文件) 包(包含多个模块 一会介绍)和内建模块(使用C编写并已链接到Python解释器内) 不过除了包 另外两个我也没用过:(

Python解释器在第一次import一个py文件的时候 会尝试将其编译为字节码文件 这个文件的扩展名通常为 pyc 它是已经完成语法检查并转译为虚拟机指令的代码 后边的导入操作会直接读取 pyc文件而不是 py文件 一般而言速度会更快

  包

Python的模块可以按目录组织为包(package) 一般来说 我们将多个关系密切的模块组织成一个包 以便于维护和使用 同时可有效避免名字空间冲突 创建一个包的步骤是 建立一个名字为包名字的文件夹 并在该文件夹下创建一个__init__ py文件 你可以根据需要在该文件夹下存放脚本文件 已编译扩展及子包

一个典型的包可能有以下结构:

   package /   __init__ py   subPack /   __init__ py   module_ py   module_ py   module_ py   subPack /   __init__ py  module_ py  module_ py  ……

只要目录下存在__init__ py 就表明此目录应被作为一个package处理 在最简单的例子中 __init__ py 是一个空文件 不过一般我们都要在__init__ py中做一些包的初始化动作 或是设定一些变量

最常用的变量是__all__ 当使用包的人在用from pack import * 语句导入的时候 系统会查找目录pack下的__init__ py文件中的__all__这个变量 __all__是一个list 包含了所有应该被导入的模块名称 例如 __all__ = [ m m m ] 表示当from pack import * 时会import 这三个module

如果没有定义__all__ from pack import * 不会保证所有的子模块被导入 所以要么通过__init py__ 要么显式地import 以保证子模块被导入 如 import pack m   pack m   pack m

  本章小结

本章介绍了Python中模块与包的使用方法 要点如下

( ) 模块是一个可以导入的Python脚本文件

( ) 包是一堆按目录组织的模块和子包 目录下的__init__ py文件存放了包的信息

( ) 可以用import import as form import 等语句导入模块和包

总之 模块与包是在物理上组织Python代码复用的一种有效方式 它有点类似于中的程序集(Assembly) 初学Python不一定要会自己建立模块和包 但一定要学会使用各种包 这正是Python的强大之处 Python带着各种各样的battery 当你想完成一项功能时 最好先去搜索是不是有相关的包能够复用(多数情况下是这样的 因为在各种领域都有太多的人在为Python作著贡献) 而且 绝大多数Python包都是开源的 研读优秀的代码也是提高编程能力的一种有效途径

进一步阅读的参考

《从C#到Python》系列连载到今天就全部写完了 非常感谢各位的支持 鼓励以及批评 使我能够不断完善和提高 读完这个连载 在Python的语法上应该够应付一阵了 当然结合具体的应用领域 还是有很多东西需要不断学习 在此向大家推荐一些有用的读物

[ ] 科学计算方面 这个是我的应用Python的主阵地 推荐HYRY Studio的《用Python做科学计算》(见) 我个人认为非常优秀的一本原创著作(这么好的书不知为何不正式出版 钦佩作者的rp !)

[ ] GUI开发方面 如果你用wxPython 那么肯定要看《wxPython in Action》(中文版见) 而我个人主要用PyQt 这方面值得推荐的读物是柴树杉翻译的《PyQt 编程简介》(见) 如果英文好 还是推荐看《Rapid GUI Programming with Python and Qt》(英文pdf版地址 Oct pdf)

[ ] 开发方面 这个我还没有涉及 Django的资料网上也是大把了 其它的Python Web开发框架也是多如牛毛 自己找找吧 )

lishixinzhi/Article/program/ASP/201311/21672