【发布时间】:2014-10-11 16:58:26
【问题描述】:
我有一个函数“函数”,我想调用 10 次,使用 2 次 5 cpus 和多处理。
因此,我需要一种方法来同步以下代码中描述的进程。
如果不使用多处理池,这可能吗?如果这样做,我会收到奇怪的错误(例如“UnboundLocalError:分配前引用的局部变量'fd'”(我没有这样的变量))。进程似乎也随机终止。
如果可能的话,我想在没有游泳池的情况下这样做。谢谢!
number_of_cpus = 5
number_of_iterations = 2
# An array for the processes.
processing_jobs = []
# Start 5 processes 2 times.
for iteration in range(0, number_of_iterations):
# TODO SYNCHRONIZE HERE
# Start 5 processes at a time.
for cpu_number in range(0, number_of_cpus):
# Calculate an offset for the current function call.
file_offset = iteration * cpu_number * number_of_files_per_process
p = multiprocessing.Process(target=function, args=(file_offset,))
processing_jobs.append(p)
p.start()
# TODO SYNCHRONIZE HERE
这是我在池中运行代码时遇到的错误的(匿名)回溯:
Process Process-5:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "python_code_3.py", line 88, in function_x
xyz = python_code_1.function_y(args)
File "/python_code_1.py", line 254, in __init__
self.WK = file.WK(filename)
File "/python_code_2.py", line 1754, in __init__
self.__parse__(name, data, fast_load)
File "/python_code_2.py", line 1810, in __parse__
fd.close()
UnboundLocalError: local variable 'fd' referenced before assignment
大多数进程都这样崩溃,但不是全部。当我增加进程数量时,它们中的更多似乎崩溃了。我还认为这可能是由于内存限制...
【问题讨论】:
-
你为什么不想使用
Pool? -
这个任务真的最适合
Pool,如果你能让它正常工作,你愿意用一个吗? -
如果您提供完整的回溯,将会很有帮助。代码在 Linux 上运行良好。你用的是什么平台?
-
另外,“同步”是什么意思?您的意思是在开始第二组之前等待第一组 5 个进程完成吗?是否需要将
function中的任何内容返回给父级? -
将其编辑到您的问题中。
标签: python parallel-processing synchronization multiprocessing threadpool