• python 非阻塞模式 进程池


     1 """
     2 非阻塞模式:当进程池有空闲,就将任务放入,它会继续执行主进程
     3 """
     4 import os
     5 import time
     6 from multiprocessing import Pool
     7 from random import random
     8 
     9 container = []
    10 
    11 
    12 def task(name):
    13     print("进行任务{}  进程ID:{}".format(name, os.getpid()))
    14     start = time.time()
    15     # random() 的值是0到1之间,这里就表示休眠 0到2秒
    16     time.sleep(random() * 2)
    17     end = time.time()
    18     return "完成任务:{}  用时:{}  进程ID:{}".format(name, (end - start), os.getpid())
    19 
    20 
    21 def callback_func(n):
    22     """将进程返回的内容n,放进这个函数内运行"""
    23     container.append(n)  # 添加返回内容到container,这里也可以对返回的函数进行其它的处理
    24 
    25 
    26 if __name__ == '__main__':
    27     pool = Pool(5)  # 创建一个进程池,里面放5个进程
    28     tasks = ["任务1", "任务2", "任务3", "任务4", "任务5", "任务6", "任务7"]
    29     for t in tasks:
    30         # apply_async 非阻塞模式,只要存在没有使用的进程,就将任务放进去
    31         pool.apply_async(task, args=(t,), callback=callback_func)
    32 
    33     pool.close()
    34     pool.join()  # 将进程池插入到这里,只要当它里面的任务全部都执行完,才继续
    35 
    36     for c in container:
    37         print(c)
    38 
    39     print("over")
  • 相关阅读:
    xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun
    查看公钥
    Flutter 环境配置,创建工程
    Flutter 简介
    Mac版本 FinalShell SSH工具
    windows下如何生成公钥和私钥
    pyqt 打包为dmg文件
    apple 升级后shell切换为zsh
    dart 类共享变量
    python 获取一小时前的时间戳
  • 原文地址:https://www.cnblogs.com/cfpl/p/12991849.html
Copyright © 2020-2023  润新知