【发布时间】:2019-05-27 21:49:53
【问题描述】:
我找到了模块multiprocessing_generator。 我使用以下代码尝试了该模块:
from multiprocessing_generator import ParallelGenerator
def my_generator():
yield (x*x for x in range(200))
with ParallelGenerator(my_generator(), max_lookahead=100) as g:
for elem in g:
print(elem)
这是我得到的错误(我在控制台中运行了我的代码,python 文件在我的桌面中):
C:\Users\crd\Desktop>python test.py Traceback(最近一次调用最后): 文件“test.py”,第 69 行,在 使用 ParallelGenerator(my_generator(), max_lookahead=100) 作为 g: 文件 "C:\Users\crd\AppData\Local\Programs\Python\Python37-32\lib\site-packages\multiprocessing_generator__init__.py", 第 62 行,在 输入 self.process.start() 文件 "C:\Users\crd\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\process.py", 第 112 行,开始 self._popen = self._Popen(self) 文件 "C:\Users\crd\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\context.py", 第 223 行,在 _Popen 返回 _default_context.get_context().Process._Popen(process_obj) 文件 "C:\Users\crd\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\context.py", 第 322 行,在 _Popen 返回 Popen(process_obj) 文件 "C:\Users\crd\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\popen_spawn_win32.py", 第 65 行,在 init 中 reduction.dump(process_obj, to_child) 文件 "C:\Users\crd\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\reduction.py", 第 60 行,在转储中 ForkingPickler(file, protocol).dump(obj) AttributeError: Can't pickle local object 'ParallelGenerator.init..wrapped'
C:\Users\crd\Desktop>Traceback(最近一次调用最后):文件 "",第 1 行,在文件中 "C:\Users\crd\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\spawn.py", 第 99 行,在 spawn_main new_handle = reduction.steal_handle(parent_pid, pipe_handle) 文件 "C:\Users\crd\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\reduction.py", 第 87 行,在steal_handle 中 _winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE) PermissionError: [WinError 5] Accès refusé
我清理了 multiprocessing_generator 模块中的代码(我删除了每个 try/exeption,我将上下文管理器转换为基本函数)。但是使用下面的代码我得到了同样的错误:
from queue import Empty
from multiprocessing import Process, Queue
def ParallelGeneratorLight():
queue = Queue()
def wrapped():
for item in (x*x for x in range(200)):
queue.put(item)
process = Process(target=wrapped)
process.start()
queue.get()
print(ParallelGeneratorLight())
这有什么问题?
【问题讨论】:
标签: python python-3.x multiprocessing generator