读书人

python关于multiprocessing 一个事例

发布时间: 2012-12-15 15:16:03 作者: rapoo

python,关于multiprocessing 一个例子的疑问
python2.7 windows7 环境

运行如下例子报错:


from multiprocessing import Process,freeze_support

import time
def f(name):
time.sleep(1)
print 'hello ',name
print os.getppid() #取得父进程ID
print os.getpid() #取得进程ID
process_list = []
if __name__ == '__main__':
for i in range(10):
freeze_support()
p = Process(target=f,args=(i,))
p.start()
process_list.append(p)
for j in process_list:
j.join()

错误如下:
Traceback (most recent call last):
File "C:\Users\zfen12x\Desktop\demo.py", line 15, in <module>
process_list.append(p)
NameError: name 'process_list' is not defined


运行另一个例子没有输出:
from multiprocessing import Process,freeze_support

from multiprocessing import Process,freeze_support

import time
def f(name):
time.sleep(1)
print 'hello '
if __name__ == '__main__':
for i in range(10):
freeze_support()
p = Process(target=f,args=(i,))
p.start()
不懂啊,特此请教
[最优解释]
我有一个想法。扩展idle。添加一个菜单。弹出一个窗口。显示我们自己整理好的例子。如果你有兴趣可以合作。具体事宜再议。
[其他解释]

process_list.append(p)

没有实例化,if __name__ == '__main__':后面加一句
process_list = []


另外,打印之后要调用 sys.stdout.flush() 才能看得到内容



[其他解释]
引用:
process_list.append(p)

没有实例化,if __name__ == '__main__':后面加一句
process_list = []


另外,打印之后要调用 sys.stdout.flush() 才能看得到内容

i'm soory 大牛,不是这个原因。我试了还是没有输出!
其实我的问题的关键点是:
请参考下例:
from multiprocessing import Process

def f(name):
print 'hello', name

if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()

我感觉应该有一个hello输出!现在我看不见!..
[其他解释]
例如我都把代码改成这样了:
还是木有输出
from multiprocessing import Process
import sys

def f(name):
print 'hello', name

if __name__ == '__main__':
sys.stdout.flush()
p = Process(target=f, args=('bob',))


sys.stdout.flush()
p.start()
sys.stdout.flush()
p.join()
sys.stdout.flush()



不过还是感谢您的解答!
[其他解释]
这其实是python 官方manual 里面的例子。
而且 上面说 multiprocessing 这个模块是从 threading 里面引申出来的。
我试了一下 如下代码:
import threading

def loop():
print '11111'

def main():
t = threading.Thread(target=loop)
t.start()
t.join()

if __name__ == '__main__':
main()

这个竟然有输出!!!!!是不是很悲剧啊!!!
[其他解释]
引用:
这其实是python 官方manual 里面的例子。
而且 上面说 multiprocessing 这个模块是从 threading 里面引申出来的。
我试了一下 如下代码:
Python code?123456789101112import threading def loop(): print '11111' def main(): t = thre……


在windows下使用threading是完全没问题的,和一般程序一样。但是process不一样了,和你用什么操作系统有关系,有些方法只有unix提供,windows是不提供的,具体我也说不上来,我用的是python3 。
在print之后要调用sys.stdout.flush()

这是我以前写的在windows xp下调用process的方法,是python 3的。

from multiprocessing import Process
import sys


def func(x):
print ('works ', x + 2)
sys.stdout.flush()

if __name__ == '__main__':
p = Process(target= func, args= (2, ))
p.start()
p.join()
p.terminate()
print ('done')
sys.stdout.flush()

[其他解释]
我用的是3.2,也有同样的问题。解决的方法是不用print,而用文件做输出。之所以没有输出,我想应该是新的进程并没有把sys.stdout设置好,这可能是python的问题,也可能是系统的问题。
[其他解释]
引用:
我用的是3.2,也有同样的问题。解决的方法是不用print,而用文件做输出。之所以没有输出,我想应该是新的进程并没有把sys.stdout设置好,这可能是python的问题,也可能是系统的问题。

真的非常感谢。
那么也就是说 其实那个进程已经打开了 只不过没有print出来而已!是这么理解?
[其他解释]
谢谢lss,确实如此。

另外,如果可以的话,可否带带小弟,小弟现在刚刚入门python。很是苦恼。

[其他解释]
引用:
我有一个想法。扩展idle。添加一个菜单。弹出一个窗口。显示我们自己整理好的例子。如果你有兴趣可以合作。具体事宜再议。

我非常感兴趣。
不过我是一个菜鸟没什么经验。仅仅相当于看完一本书的水平吧。。。。
但是,如果你真的愿意教我东西的话,我表示非常非常感谢。
我的联系方式
QQ:994998996
gmail:zfen12x@gmail.com
mail163:fzc115100@163.com

以上三种方式都可以找到我。
[其他解释]
我说一下我的实际情况:

今年没有工作,没有钱交网费,不能上网。手机流量也不多,csdn的网页很费流量。

由于通信工具的限制,用邮箱很不方便,用QQ又纯粹是个人之间的交流,与论坛的主旨不相符。

我想请你帮个忙,帮我在python爱好者(pythonfan.org)上面申请一个账号,并激活使之能够发帖,我的手机无法激活邮箱,也发不了帖子。

我想请你把我在pythonfan上面的帖子及内容转发到csdn,这里人比较多,方便讨论。pythonfan有手机版,流量很省。

我所发的帖子就是我想教给别人的内容,也不能算是教,只是引导大家讨论并想到解决问题的方法!!

如果你愿意帮忙的话,请把申请好的账号及密码发送过来(回帖就可以,不用发信息)。顺便把你想要的称呼发过来,你可以叫我小虫。


读书人网 >perl python

热点推荐