首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

关于 Python 中多进程的问题,求大佬解答

  •  
  •   Fizzyi · 135 天前 · 1039 次点击
    这是一个创建于 135 天前的主题,其中的信息可能已经有所发展或是发生改变。
    通过 multiprocessing 创建的进程池,但是现在的问题是程序执行完毕之后不不退出程序,在 pycharm 上还是运行的状态,但是什么也不打印,就一直卡着不结束,除非手动结束掉,求各位大佬解答下。
    pool = multiprocessing.Pool(processes=5)
    for i in content:
    # task(i)
    # 维持执行的进程总数为 processes,当一个进程执行完毕后会添加新的进程进去
    pool.apply_async(func=task, args=(i,))
    pool.close()
    9 回复  |  直到 2019-07-25 09:33:22 +08:00
        1
    Fizzyi   135 天前
    我认为我的程序已经是执行完毕了的,因为我每个子进程结束后有会标记。 退一步来说,如果是我的某个进程没有结束,那如何观察是卡在哪里了呢
        2
    tiedan   135 天前
    这个场景考虑 gdb 来调试
        3
    arrow8899   135 天前
    print 大法好
        4
    ClericPy   135 天前
    不给代码的盲改... 现在都流行这个了么, 靠猜的话, 我猜你没 join
        5
    shicheng1993   135 天前
    我也是小白,我来说点意见,也不知道自己对不对,错了请大家指出,apply_async() 是非阻塞的,你主进程不会停在这句话上的,直接运行到这段代码下面去了,而子进程才刚被调用开始执行。
    为什么不用 pool.map((func=task, args=(i,))
    子进程运行的时候,阻塞住主进程,等待所有子进程完成,返回运行结果的 list,代码执行才往下走。
    下面再处理子进程的结果,然后 pool.close()
    如果你本身就是要求不管子进程执行完没有,那就不是我说的情况了,join 子进程或者子进程 sys.exit(0)
        6
    fghjghf   135 天前
    process:都是先执行父进程,再到子进程。子进程不退出,父进程就会等他结束后再结束。join 堵塞的意思,写了这个,那就卡住了,要执行完才会往下走。用这个的话,就可以控制顺序:先执行子进程,再执行主进程。这样说你理解了吧?多跑下官方的 demo 你就知道了
        7
    wuwukai007   135 天前
    第一:使用进程池,进程任务出现错误不会再主进程中显示,就是子进程出错,子进程结束,主进程继续,如果要捕获子进程错误,自己写个错误收集的装饰器,
        8
    wuwukai007   135 天前
    如果想让子进程的错误在主进程中捕获并显示,最好只用最原始的方式创建进程池
    list_1 = []
    for i in range(xxx):
    m = multiprocessing.Process(target=fun,args=(,))
    list_1.append(m)
    m.start()
    for i in list_1:
    i.join()
        9
    www5070504   134 天前
    target 函数是循环 or 阻塞的?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1841 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 28ms · UTC 01:19 · PVG 09:19 · LAX 17:19 · JFK 20:19
    ♥ Do have faith in what you're doing.