AERBAS 2023-03-21 22:54 采纳率: 50%
浏览 20
已结题

python进程池中子进程不执行

img

请教下为什么我这段代码子进程不执行?


import time
from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
from multiprocessing import cpu_count

def fun(i):
    print('{}'.format(i))
    time.sleep(1)

if __name__=='__main__':
    p =  ProcessPoolExecutor(4)
    for t in range(10):
        p.submit(fun, t)
    p.shutdown(True)
    print(cpu_count())
  • 写回答

1条回答 默认 最新

  • 瞬间的未来式 2023-03-22 09:50
    关注

    您的代码看起来没有明显的问题,但可能是由于以下原因导致子进程没有执行:

    在Windows上,必须将调用主程序的代码放在if name=='main'语句块中,否则将导致无法启动进程。
    由于您使用的是进程池,因此进程池可能会在运行时分配不同的进程来执行任务。如果您的系统中没有足够的空闲进程,则可能会导致子进程无法执行。您可以尝试使用ThreadPoolExecutor而不是ProcessPoolExecutor,以查看问题是否在进程池中。
    您的代码中的任务非常简单,可能无法看出子进程是否执行。您可以尝试将fun函数更改为输出一些更有意义的东西,例如时间戳和子进程ID等,以查看子进程是否正在运行。
    下面是一个更新后的示例代码,用于输出一些更有意义的东西,以便更好地检查子进程是否正在执行:

    import time
    import os
    from concurrent.futures import ProcessPoolExecutor
    
    def fun(i):
        print('Task {} started at {} in process {}'.format(i, time.ctime(), os.getpid()))
        time.sleep(1)
        print('Task {} finished at {} in process {}'.format(i, time.ctime(), os.getpid()))
    
    if __name__=='__main__':
        p = ProcessPoolExecutor(4)
        for t in range(10):
            p.submit(fun, t)
        p.shutdown(wait=True)
    

    请注意,我在代码中添加了os.getpid()函数,以便在每个子进程中输出其进程ID。如果运行此代码,您应该会看到输出类似于以下内容:

    Task 0 started at Mon Mar 22 10:40:11 2023 in process 1234
    Task 1 started at Mon Mar 22 10:40:11 2023 in process 1235
    Task 2 started at Mon Mar 22 10:40:11 2023 in process 1236
    Task 3 started at Mon Mar 22 10:40:11 2023 in process 1237
    Task 0 finished at Mon Mar 22 10:40:12 2023 in process 1234
    Task 4 started at Mon Mar 22 10:40:12 2023 in process 1234
    Task 1 finished at Mon Mar 22 10:40:12 2023 in process 1235
    Task 5 started at Mon Mar 22 10:40:12 2023 in process 1235
    Task 3 finished at Mon Mar 22 10:40:12 2023 in process 1237
    Task 6 started at Mon Mar 22 10:40:12 2023 in process 1237
    Task 2 finished at Mon Mar 22 10:40:12 2023 in process 1236
    Task 7 started at Mon Mar 22 10:40:12 2023 in process 1236
    Task 4 finished at Mon Mar 22 10:40:13 2023 in process 1234
    Task 8 started at Mon Mar 22 10:40
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月21日

悬赏问题

  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据