它不同于 UNIX 中的守护进程。这里的 daemonic 进程事实上就是普通的进程
3. pid :子进程的ID。
在进程被派生出来之前,该属性为 None
4. exitcode :子进程的退出码
如果子进程尚未退出,则它是 None
如果子进程被信号 终止,则退出码为
5. authkey :进程的验证 key (一个字符串)
主进程的 authkey 是一个随机数,由 os.urandom() 给出
子进程的 authkey 继承自父进程,但是也可以修改
6. sentinel :它是一个系统提供的数字句柄,作用是一个哨兵。当子进程结束时,它就可用
通常它用于判断子进程是否结束。在这个意义上,推荐使用 .join() 方法
7. .start()/.join()/.is_alive()/.terminate()/.exitcode 必须由父进程调用,一定不能由子进程调用。
2.3
异
常
1. multiprocessing.ProcessError :所有 multiprocessing 异常的基类
2. multiprocessing.BufferTooShort :当调用 Connection.recv_byte_into() 时,如果缓冲区太小,则抛出
该异常
假设 e 为该类异常的一个实例,则 e.args[0] 将给出读到的内容
3. multiprocessing.AuthenticationError :当验证异常时,抛出该异常
4. multiprocessing.TimeoutError :当超时时,抛出该异常
三
、
进
程
间
通
信
1. multiprocessing 支持两种类型的进程间通信: Queue , Pipe
Pipe 只能让两个进程之间相互通信
Queue 能够让多个进程之间相互通信
3.1 Pipe
1. API:
它是一个函数,调用时返回一对 Connection 对象: (conn1,conn2) ,代表一个管道的两个端口。
如果 duplex=True (默认值),则管道是双向的。如果 duplex=False ,则管道是单向的:
conn1 只能接收消息
conn2 只能发送消息
2. 每个 Connection 对象都有一个 .send() 方法和一个 .recv() 方法
3. 如果同一时间有多个进程(或进程)同时读同一个管道的某个端口,或者同时写同一个管道的某个端口,则
会导致管道的数据被破坏
3.1.1 Connection