五指山西 2019-01-16 10:38 采纳率: 0%
浏览 1653

windows上用python学习multiprocessing模块的进程池,程序创建了进程池,但是却没用进入子进程?

1.问题描述:
看网课学习python,昨天学到进程池和进程之间的通信。
看老师的视频时运行正确,自己确实没出想象中的效果。
在windows上用python学习multiprocessing模块的进程池,在pycharm中程序创建了进程池,但是却没用进入子进程?但是在命令窗口去可以进入子进程。

            代码:
# 测试进程池的使用
from multiprocessing import Pool
import time, os


def work(num):

    print('咋了?', end='\t')
    print(5*num)
    time.sleep(1)


if __name__ == "__main__":
    print('Parent process %s.' % os.getpid())
    # 定义一个进程池,设置最大进程为4,默认为cpu核心数
    po = Pool(4)
    for i in range(10):
        # 调用apply_saync()方法,apply_saync选择要调用的目标,以及将目标需要的参数
        # 以元组形式传递,每次循环都会用空出来的进程去调用目标。
        po.apply_async(func=work, args=(i,))
    # 关闭进程池,只准许进程从进程池出来,不准进入进程池
    po.close()
    # 主进程等待子进程结束,必须写再close后。
    po.join()
    print('子进程结束')


            然后在pycharm的运行结果是既没有报错也没有执行子进程的指令
            图是这样的:
            ![图片说明](https://img-ask.csdn.net/upload/201901/16/1547605427_367407.png)
           为了给各位大佬提供更多信息,我在循环那debug了下,尽管我目前还看不懂。
            ![图片说明](https://img-ask.csdn.net/upload/201901/16/1547605634_254497.png)


            在Windows的命令窗口下直接运行结果就有了。貌似得到我的结果了。
            ![图片说明](https://img-ask.csdn.net/upload/201901/16/1547605512_956498.png)
            说明:昨天也查了半天资料,说的都是加if __name__ == "__main__":
            来保证正常,可是我还是出问题了!
            请各位大佬指点迷津,拯救一个初学者吧。
  • 写回答

3条回答 默认 最新

  • 糖醋小侠 2019-03-15 17:30
    关注

    我也遇到了同样的问题。。。
    https://segmentfault.com/a/1190000013681586
    这个地方说是windows创建进程的方式与linux不一样的原因

    评论

报告相同问题?

悬赏问题

  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决