我正在尝试同时在多个核心上运行相同的进程池。这是我的代码的简化版本。
好像我的函数永远不会被map_async
调用,而且代码会被卡住(在print (4)
之后)。
有什么想法吗?
import multiprocessing
pairs = [['a','b'],['c','d'],['e','f'],['g','h']]
def printPairs(first, second):
print('pairs =', pairs)
def parallel(function, pairs):
cpu_no = multiprocessing.cpu_count()
if len(pairs) < cpu_no:
cpu_no = len(pairs)
p = multiprocessing.Pool(cpu_no)
p.map_async(function, pairs, chunksize=1)
print('3, p = ', p)
p.close()
print('4')
p.join()
print('5')
return
parallel(printPairs, pairs)
答案 0 :(得分:0)
让pairs
成为printPairs
的参数:
import multiprocessing
def printPairs(pairs):
print('pairs =', pairs)
def parallel(function, pairs):
cpu_no = multiprocessing.cpu_count()
if len(pairs) < cpu_no:
cpu_no = len(pairs)
p = multiprocessing.Pool(cpu_no)
p.map_async(function, pairs, chunksize=1)
print('3, p = ', p)
p.close()
print('4')
p.join()
print('5')
return
pairs = [['a','b'],['c','d'],['e','f'],['g','h']]
parallel(printPairs, pairs)
它有效。
输出:
3, p = <multiprocessing.pool.Pool object at 0x10169d0f0>
4
pairs = ['c', 'd']
pairs = ['a', 'b']
pairs = ['e', 'f']
pairs = ['g', 'h']
5
答案 1 :(得分:0)
我怀疑在Windows上你需要获得功能结果,即使你不需要它们。即使没有必要,这似乎是一个好主意。
import multiprocessing
pairs = [['a','b'],['c','d'],['e','f'],['g','h']]
def printPairs(pair):
print('pair =', pair)
def parallel(function, pairs):
cpu_no = multiprocessing.cpu_count()
if len(pairs) < cpu_no:
cpu_no = len(pairs)
p = multiprocessing.Pool(cpu_no)
res = p.map_async(function, pairs, chunksize=1)
print('3, p = ', p)
print(res.get())
print('4')
p.close()
print('5')
p.join()
print('6')
return
if __name__ == '__main__':
parallel(printPairs, pairs)