Python并发编程之multiprocessing模块中的进程

一、multiprocessing 进程简介

multiprocessing模块所有的重点都放在进程上。

Process([group [, target [, name [, args [, kwargs]]]]])
  • group 指定进程组,大多数情况下用不到,值为None
  • target 是当进程启动时执行的可调用对象
  • args 是传递给target的位置参数的元组
  • kwargs 是传递给target的关键字参数的字典

二、Process实例的方法

Process的实例p具有以下方法

  • p.is_alive
    如果p仍然在运行,则返回True
  • p.join(timeout)
    等待进程p终止。timeout是可选的超时期限。进程可以被join无数次,但如果连接自身则会出错
  • p.run()
    进程启动时运行的方法。默认情况下,会调用传递给Process构造函数的target。定义进程的另一种方法是从Process类继承并重写run()函数
  • p.start()
    启动进程。这将运行代表进程的子进程,并调用该子进程中的p.run()函数
  • p.terminate()
    强制终止进程。如果调用此函数,进程p将被立即终止,同时不会进行任何清理动作。如果进程p创建了它自己的子进程,这些进程将变成僵尸进程。所以使用此方法时需要特别小心。如果p保存了一个锁定或通过进程间通信被调用,那么终止它可能会导致死锁或I/O崩溃。

三、Process实例的属性

Process的实例p也具有以下数据属性

  • p.authkey
    进程的身份验证键。除非显示设定,这是由os.urandom()函数生成的32字符的字符串。这个键的用途是为涉及网络连接的底层进程间通信提供安全性。这类连接只有在两端具有相同的身份验证键时才能成功。
  • p.daemon
    一个Boolean标志,指示进程是否是后台进程。当创建它的python进程终止时,后台进程将自动终止。另外,禁止后台进程创建自己的新进程。p.daemon的值必须在使用p.start()函数启动进程之前进行设置。
  • p.exitcode
    进程的整数退出代码。如果进程仍然在运行,它的值为none。如果值为负数,-N表示进程由信号N所终止
  • p.name
    进程的名称
  • p.pid
    进程的整数进程ID。

四、Process使用示例

  • 以单独进程的形式创建和启动函数(或其他可调用对象)
import multiprocessing
import time

def clock(interval):
  while True:
    print("the time is %s" % time.ctime())
    time.sleep(interval)

if __name__ == '__main__':
  # 注意args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号
  p = multiprocessing.Process(target = clock, args = (15, ))
  p.start()
  • 将进程定义为继承自Process的类
import multiprocessing
import time

class ClockProcess(multiprocessing.Process):
  def __init__(self, interval):
    multiprocess.Process.__init__(self)
    self.interval = interval

  def run(self):
    while True:
      print("the time is %s" % time.ctime())
      time.sleep(self.interval)

if __name__ == '__main__':
  p = ClockProcess(15)
  p.start()

上述两个例子中,子进程应该每隔15秒打印一次时间。需要注意的是,为了实现跨平台的可移植性,只能像上面这样由主程序创建新的进程。这在unix上是可选的,但在windows上是必须的。在windows上,很可能需要在命令行中运行上述例子,例如在vscode中,不能以调试模式运行,只能以非调试模式执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smart_cat

你的鼓励将是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值