如果我观看 python 多处理教程,我有一个简单的问题要解决(或多或少)
,我发现一个进程应该或多或少地像这样启动:
from multiprocessing import *
def u(m):
print(m)
return
A=Process(target=u,args=(0,))
A.start()
A.join()
它应该打印一个 0 但没有打印任何内容。相反,它永远挂在A.join()
.
如果我手动启动功能你这样做
A.run()
它实际上在外壳上打印 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)
应该是
0
1
但实际上是
0
如果我在最后一行之前添加
A.run()
然后输出变为
1
0
这对我来说似乎很困惑......
如果我尝试加入该过程,它将永远等待。
但是,如果它可以帮助我回答
我的操作系统是 Mac os x 10.6.8
使用的 python 版本是 3.1 和 3.3
我的电脑有 1 个英特尔核心 i3 处理器
--更新--
我注意到这种奇怪的行为只有在从 IDLE 启动程序时才会出现,如果我从终端运行程序,一切都按预期工作,所以这个问题必须与一些 IDLE 错误有关。
但是从终端运行程序更奇怪:使用 range(100000000) 之类的东西会激活我所有计算机的内存,直到程序结束;如果我记得很清楚,这不应该发生在 python 3 中,只发生在较旧的 python 版本中。我希望这些新信息能帮助你给出答案
--更新 2--
即使我不从我的进程执行输出,也会出现错误,因为设置了这个:
def u():
return
作为进程的目标然后启动它,如果我尝试加入进程,空闲等待永远