[Python2.6]关于mutliprocessing中Queue的问题?

[Python2.6]关于mutliprocessing中Queue的问题?

我写了个程序有个问题, 我想不通
from multiprocessing import *
def printName(name,q):
    q.put("hello")
    print 'hello',name

if __name__ == "__main__":  
    q = Queue()
    pool = multiprocessing.Pool(4)
    result = pool.apply_async(printName, ("feng",q))
    print q.get()
    result.wait()  
   
Error:
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python26\lib\threading.py", line 524, in __bootstrap_inner
    self.run()
  File "C:\Python26\lib\threading.py", line 479, in run
    self.__target(*self.__args, **self.__kwargs)
  File "C:\Python26\lib\multiprocessing\pool.py", line 225, in _handle_tasks
    put(task)
  File "C:\Python26\lib\multiprocessing\queues.py", line 51, in __getstate__
    assert_spawning(self)
  File "C:\Python26\lib\multiprocessing\forking.py", line 25, in assert_spawning

    ' through inheritance' % type(self).__name__
RuntimeError: Queue objects should only be shared between processes through inhe
ritance   

为什么会报这个错啊, pool里面queue不能当参数传吗?
还有queue可不可以不做参数传, 声明一个全局queue, 子进程和父进程都能看到?
谢谢


QUOTE:
原帖由 fxjwind 于 2008-11-25 10:03 发表
声明一个全局queue, 子进程和父进程都能看到?

你这个问法是什么意思?
我的意思是, 能不能在main里面声明一个queue, 子进程应该直接可以访问这个queue, 而不用每次都要把queue作为参数传进去, 我觉得这样很麻烦
还有我也不太理解这个error什么意思
RuntimeError: Queue objects should only be shared between processes through inhe
ritance
多进程间Queque通信是基于管道的。。。所以不能在非父子进程进通信。。
没有继承关系不能共享queue,用Process类就可以 比如:
if __name__ == "__main__":  
    q = Queue()
    for i in range(0,4):
        p = Process(target=printName, args=("feng",q))
    #result = pool.apply_async(printName, ("feng",q))
        p.start()
        p.join()
print q.get()
6楼:
你的意思是Main Process 和pool process之间没有继承关系, 所以不能传递queue?
用pool就没法使用queue是吧?
5楼:
我在main里面创建的pool, pool process应该算是子进程吧, 我不太明白
能进一步解释一下吗

我其实要做的是想用个process pool去parser 大量的网页, 然后存到数据库中, 中间用queue做个parser结果的缓存, 用pool是考虑避免大量进程创建和销毁的开销
如果这样不行, 我是不是只能自己去写一个pool
谢谢


QUOTE:
原帖由 alan_yang 于 2008-11-25 13:19 发表
多进程间Queque通信是基于管道的。。。所以不能在非父子进程进通信。。

命名管道没这个限制吧?