• python多进程(二)一些基础属性和方法


    1. import multiprocessing
    2. # 定义一个任务函数
    3. def worker(num):
    4.   print(f'Worker {num} started')
    5.   # 这里可以执行具体的任务逻辑
    6.   # ...
    7. # 创建多个进程
    8. if __name__ == '__main__':
    9.   processes = []
    10.   for i in range(5):
    11.     p = multiprocessing.Process(target=worker, args=(i,))
    12.     processes.append(p)
    13.     p.start()
    14.   # 等待所有进程完成
    15.   for p in processes:
    16.     p.join()
    17.   print('All processes completed')


      
    输出
    Worker 0 started
    Worker 1 started
    Worker 2 started
    Worker 3 started
    Worker 4 started
    All processes completed
    这是一段最简单的多进程代码
    在上面我们用到了multiprocessing.Process类,传入了一个target,这个参数是方法的的全称
    并且不带括号!!!;传入一个args,这是方法需要的参数,以元组的形式传递。
    进程的启动是调用start()方法,调用完start之后做了以下操作
    1.检查进程的状态,确保它尚未开始运行。
    2.在操作系统中创建一个新的进程。
    3.将进程的任务逻辑传递给操作系统,以便在新进程中执行。
    4.在新进程中调用进程的run()方法,执行任务逻辑。
    5.如果进程是守护进程,则设置它的守护属性。
    6.开始执行新进程中的任务逻辑

    之后循环进程列表,执行join方法,调用完join之后做了以下操作
    1.阻塞当前进程,直到调用join()方法的进程执行完毕。
    2.等待被调用的进程完成其任务逻辑。
    3.如果被调用的进程是守护进程,join()方法会将它标记为已完成,以便主进程可以正常退出。
    需要注意的是,join()方法会阻塞当前进程,直到被调用的进程执行完毕。这意味着主进程会等待子进程完成后再继续执行后续的代码

    其他一些常用的属性和方法
    1.设置进程名使用name参数
    p = multiprocessing.Process(target=worker, name='WorkerProcess')
    2.查看进程的pid
    p.pid
    3.检查进程是否存活
    p.is_alive()
    4.定义进程的执行逻辑
    Python多进程中,run()方法是multiprocessing模块中Process类的一个方法。它定义了进程的执行逻辑,即进程启动后要执行的代码。
    当调用start()方法启动进程时,会自动调用进程对象的run()方法来执行进程的任务逻辑。
    以下是一个示例代码,演示了如何在自定义的进程类中重写run()方法:
    import multiprocessing
    # 自定义进程类,继承自multiprocessing.Process
    class MyProcess(multiprocessing.Process):
      def run(self):
        print(f'Worker started in process {self.name}')
        # 执行进程的任务逻辑
        print('Worker is doing some work...')
        print(f'Worker finished in process {self.name}')
    5.终止进程的执行
    p.terminate()
    6.关闭进程
    p.close()
    7.terminate()方法和close()方法的区别
    terminate(): 该方法用于强制终止进程,即立即停止进程的执行,不管进程是否已经完成任务。当调用terminate()方法时,进程会立即退出,不会执行任何清理操作。
    terminate()方法是非阻塞的,即调用该方法后,主进程不会等待被终止的进程完成。它会立即返回,主进程可以继续执行后续的代码。
    被终止的进程无法捕获到terminate()方法的调用,也无法执行任何终止前的清理操作。
    close(): 该方法用于关闭进程,即告诉进程不再接收新的任务,但允许进程完成当前的任务。当调用close()方法后,进程不会立即退出,而是继续执行直到完成任务。
    close()方法是阻塞的,调用该方法后,主进程会等待被关闭的进程完成当前任务后再继续执行后续的代码。
    被关闭的进程可以通过监听KeyboardInterrupt异常等方式来判断是否需要退出,并执行相应的清理操作。
     

  • 相关阅读:
    爆肝整理,最全单元测试-测试用例总结(全覆盖)及拿即用...
    POJ2676Sudoku题解
    php框架thinkPHP6的安装教程
    003.Vim编辑器
    Mysql -- 表的约束
    巯基SH/氨基/NH2/羧基COOH/PEG/蛋白Protein/抗体antibody修饰Au@SiO2核壳纳米粒子/二氧化硅包裹金表面
    .Net 6.0全局异常捕获
    数仓学习笔记(2)——业务数据采集
    notepad++ 配置 python 以及Anaconda中的python(已解决)
    如何阅读一本书(上)
  • 原文地址:https://blog.csdn.net/weixin_42575811/article/details/134296420