为什么进程不加入而不运行?

Alb*_*lla 8 python parallel-processing macos multiprocessing python-3.x

我有一个简单的问题来解决(或多或少)
,如果我看蟒蛇多的教程,我看到的是一个过程,应开始或多或少是这样的:

from multiprocessing import *

def u(m):
    print(m)
    return

A=Process(target=u,args=(0,))
A.start()
A.join()
Run Code Online (Sandbox Code Playgroud)

它应该打印0但没有打印.相反,它永远挂在了A.join().

如果我手动启动你这样做的功能

A.run()
Run Code Online (Sandbox Code Playgroud)

它实际上在shell上打印0但它不能同时工作
,例如以下代码的输出:

from multiprocessing import *
from time import sleep

def u(m):
    sleep(1)
    print(m)
    return

A=Process(target=u,args=(1,))
A.start()
print(0)
Run Code Online (Sandbox Code Playgroud)

应该是
0
1

但实际上是
0

如果我在最后一行之前添加

A.run()
Run Code Online (Sandbox Code Playgroud)

然后输出变为
1
0

这对我来说似乎有点困惑......

如果我尝试加入这个过程,它会永远等待.

但是,如果它可以帮助给我一个答案
我的操作系统为Mac OS X 10.6.8
使用Python版本是3.1和3.3
我的电脑有1个英特尔酷睿i3处理器

--Update--
我注意到这种奇怪的行为只有在从IDLE启动程序时才会出现,如果我从终端运行程序一切正常,那么这个问题必须连接到一些IDLE错误.
但是来自终端的runnung程序甚至更奇怪:使用范围(100000000)之类的东西激活我所有计算机的内存,直到程序结束; 如果我记得很清楚这不应该发生在python 3中,只有在较旧的python版本中.我希望这些新信息可以帮助你给出答案

- 更新2--
即使我不从我的进程执行输出,也会发生错误,因为设置此:

def u():
    return
Run Code Online (Sandbox Code Playgroud)

作为进程的目标,然后启动它,如果我尝试加入进程,空闲等待永远

shx*_*hx2 6

正如这里这里所建议的那样,问题是IDLE覆盖sys.stdinsys.stdout以某种奇怪的方式,它们不会干净地传播到你从它产生的进程(它们不是真正的文件句柄).

第一个链接也表明它不太可能很快被修复("可能是'无法修复'问题",他们说).

所以不幸的是,我建议的唯一解决方案是不要将IDLE用于此脚本......


dav*_*off 0

您是否尝试过添加A.join()到您的程序中?我猜测您的主进程在子进程打印之前退出,这导致输出被隐藏。如果您告诉主进程等待子进程(A.join()),我敢打赌您会看到您期望的输出。