是否可以将queue.LifoQueue()
与multiprocessing.Process()
一起使用(或者multiprocessing.Pool
?
from queue import LifoQueue
from multiprocessing import Process
from functools import partial
x = LifoQueue()
for i in range(100):
x.put(i % 4)
# f = partial(x.get, block=True) # tried with both block=True and block=False
Process(target=x.get).start() # also tried get_nowait
然而,这会引发错误:TypeError: can't pickle _thread.lock objects
。 x.get()
和x.get_nowait()
本身就可以正常工作。这SO answer on "How to use multiprocessing queue in Python?"似乎很有趣,但似乎不适用于LifoQueue
。奇怪的是,当从终端运行时,错误是不同的EOFError: Ran out of input
(之后LifoQueue
实例中仍然包含元素)。我尝试使用multiprocessing.Pool
,但也无法使用它。
环境,如果重要的话:在Windows 10上通过Anaconda发行版安装Python 3.6.3。
有没有办法同时使用这两种?