【问题标题】:studying parallel programming python学习并行编程python
【发布时间】:2014-08-07 12:50:08
【问题描述】:
import multiprocessing
from multiprocessing import Pool
from source.RUN import*

def func(r,grid,pos,h):
    return r,grid,pos,h
    p = multiprocessing.Pool()  # Creates a pool with as many workers as you have CPU cores
    results = []


if __name__ == '__main__':
    for i in  pos[-1]<2:
    results.append(Pool.apply_async(LISTE,(r,grid,pos[i,:],h)))
    p.close()
    p.join()

for result in results:
    print('liste', result.get())

我想为(LISTE,(r,grid,pos[i,:],h)) 进程创建池,而i 在 pos 中,它在不同的文件中是变量ndarray[],我必须在一个 While 循环之间的另一个文件中调用这整个函数。但是这段代码给出了错误,如果我正在使用 if __name__ == '__main__': 它不会通过if __name__ == '__main__': 模块下方 请告诉我我该怎么做

【问题讨论】:

  • 这:for i in pos[-1]&lt;2: 没有意义。你到底是什么意思?
  • for i in pos[-1]
  • 也许我遗漏了一些东西...pos[-1]&lt;2 不只是要评估为TrueFalse 吗?那么你正在做for i in True:for i in False:
  • no pos[-1]

标签: python parallel-processing multiprocessing


【解决方案1】:

我仍然很难理解您的问题。但我认为这就是你要找的:

您希望能够调用一个函数来创建一个给定r, grid, pos, h 的池,迭代pos 将其提供给Pool,然后返回结果。您还希望能够从不同的模块访问该功能。如果这就是你要问的,你可以这样做:

async_module.py

from multiprocessing import Pool

# Not sure where the LISTE function gets defined, but it needs to be in here.

def do_LISTE(*args):
    # args is a tuple containing (r, grid, pos[i, :], h)
    # we use tuple expansion (*args( to send each parameter to LISTE
    return LISTE(*args)

def async_process(r,grid,pos,h):
    return r,grid,pos,h
    p = multiprocessing.Pool()  # Creates a pool with as many workers as you have CPU cores
    results = p.map(do_LISTE, [(r,grid,pos[i,:], h) for i in pos[-1]<2])
    p.close()
    p.join()
    return results

然后在其他模块中:

from async_module import async_process

def do_async_processing():
    r = "something"
    grid = get_grid()
    pos = get_pos()
    h = 345
    results = async_process(r, grid, pos, h)

if __name__ == "__main__":
    do_async_processing()  # Make sure the entry point is protected by `if __name__ == "__main__":`.

【讨论】:

  • 感谢 dano 的回答..仍然没有得到满意的结果。我可以提供您的电子邮件 ID,以便我可以将整个代码发送给您以获得更好的想法..或 dhruvalraval@ymail.com 只是在此问题上联系我身份证..