进程和异常(Process and exceptions)

来源:互联网 发布:php分类信息系统 编辑:程序博客网 时间:2024/05/28 15:42

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

Process对象表示在一个独立进程中运行的活动。Process类具有与threading.Thread模块的所有方法同等的方法。

应始终调用带有关键字参数的构造函数。group的值始终为None,它是专门为了与threading.Thread兼容而存在的。target是由run()方法调用的可调用对象,它的默认值是None,即不调用任何东西。name是进程的标识。args是target调用的元组参数。kwargs是target调用的关键字字典参数。如果提供daemon关键字,那么只是将进程的daemon属性标记为True或False。如果值为None(默认值),则此标记将从创建的进程继承。

默认情况下,没有参数传递给target。

如果一个子类重写了构造函数,它必须确保在对进程做其它操作之前调用了基类的构造函数(Process.__init__() )。

在版本3.3中的更改:添加daemon参数。

run()

       方法表示进程的活动。

       你可以在子类中重写这个方法。标准的run()方法将调用可调用对象作为target参数传递给对象的构造函数,如果有,分别带上从args参数和kwargs参数取得的序列参数和关键字参数。

start()

        启动进程活动。

        每个进程对象最多只能调用一次。它为在独立的进程中被调用的对象的run()方法做准备。

join([timeout])

        如果可选参数timeout是None(默认值),join()阻塞进程,直到调用join()方法的进程结束为止。如果timeout是一个正数,进程至少被阻塞timeout秒。注意如果它的进程结束或者join()方法超时join()方法返回None。检查进程的exitcode判断进程是否结束。

        一个进程可以被连接(joined)多次。

        进程不能连接(join)自己,因为这会导致死锁。在进程被启动前连接(join)另一个进程会出错。

name

        进程的名字。name是一个仅用于标识进程的字符串。它没有语义。多进程可以有相同的name。

        通过构造函数设置初始name。如果没有为构造函数提供明确的name,那么就以“Process-N1:N2:...:Nk”的形式构建name,其中每个Nk是其父代的第N个子代。

is_alive()

        返回进程是否处于活跃状态。

        进程对象的活跃状态是从start()方法返回到子进程结束那一刻。

daemon

        进程的daemon标记。一个布尔值(Boolean)。它必须在start()方法被调用前设置。

        初始值从创建的进程继承。

        当一个进程退出,它会尝试结束所有的守护子进程。

        注意,守护进程不允许创建子进程。否则,如果当一个守护进程的父进程退出时,守护进程得到终止,使得守护进程的子进程成为孤进程。此外,这些不是Unix守护进程或服务,它们是标准进程--如果非守护进程退出就终止(而不是joined)。

除了threading.Thread API之外,Process对象还支持以下属性和方法:

pid

        返回进程的ID。进程被生成前,它的值是None。

exitcode

        子进程的退出码。如果进程尚未结束,它的值为None。一个负值-N表明子进程是被信号N结束的。

authkey

        进程的认证密钥(字节字符串)。

        当初始化多进程时,使用os.urandom()为主进程分配一个随机字符串。

        当一个进程对象被创建,它将继承父进程的认证密钥,尽管这可以通过将authkey设置为另一个字节字符串来改变。

        见Authentication keys.

sentine1

         系统对象的数字句柄,在进程结束时将变为“ready”

         如果要使用multiprocessing.connection.wait()等待多个事件,可以使用此值。否则调用join()更简单。

         在Windows上,这是一个可用于WaitForSingleObject和WaitForMultipleObjects系列API调用的操作系统句柄。 在Unix上,这是一个文件描述符,可以与select模块的原函数一起使用。

terminate()

         结束进程。在Unix上,这是使用SIGTERM信号完成的; 在Windows上使用TerminateProcess()。 注意,退出处理程序和finally子句等,将不会被执行。

         注意,进程的后代进程不会被终止 - 它们将成为孤进程。

         警告:如果在相关联的进程正在使用管道或队列时使用此方法,则管道或队列容易损坏,并且可能导致其他进程也无法使用。 类似地,如果进程已经获得锁或信号等,那么终止它可能导致其他进程死锁。

注意,start(),join(),is_alive(),terminate()和exitcode方法应该只被创建了进程对象的进程调用。

进程的一些方法的示例用法:

>>> import multiprocessing, time, signal>>> p = multiprocessing.Process(target=time.sleep, args=(1000,))>>> print(p, p.is_alive())<Process(Process-1, initial)> False>>> p.start()>>> print(p, p.is_alive())<Process(Process-1, started)> True>>> p.terminate()>>> time.sleep(0.1)>>> print(p, p.is_alive())<Process(Process-1, stopped[SIGTERM])> False>>> p.exitcode == -signal.SIGTERMTrue

异常:multiprocessing.ProcessError

所有多进程异常的基类

异常:multiprocessing.BufferTooShort

当提供的缓冲区对象对于消息读取而言太小时,Connection.recv_bytes_into()引发的异常。

异常:multiprocessing.AuthenticationError
在出现身份验证错误时触发。

异常:multiprocessing.TimeoutError

当超时时,由带有timeout参数的方法触发。

0 0
原创粉丝点击