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)
作为进程的目标,然后启动它,如果我尝试加入进程,空闲等待永远
您是否尝试过添加A.join()到您的程序中?我猜测您的主进程在子进程打印之前退出,这导致输出被隐藏。如果您告诉主进程等待子进程(A.join()),我敢打赌您会看到您期望的输出。
| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |