【问题标题】:How do you use Python Multiprocessing for a function with zero positional arguments?您如何将 Python 多处理用于具有零位置参数的函数?
【发布时间】:2018-02-26 00:43:32
【问题描述】:

这是一个例子:

import multiprocessing
def function():
    for i in range(10):
        print(i)

if __name__ == '__main__':
    p = multiprocessing.Pool(5)
    p.map(function, )

产生错误:TypeError: map() missing 1 required positional argument: 'iterable'

该函数不需要任何输入,所以我希望不要人为地强制它。还是多处理需要一些可迭代的?

以下代码不返回/打印任何内容。为什么?

import multiprocessing
def function():
    for i in range(10):
        print(i)

if __name__ == '__main__':
    p = multiprocessing.Pool(5)
    p.map(function, ())

【问题讨论】:

  • ... map 需要一个可迭代到 map 的函数到... 如果这不是您想要的,您没有必须使用map ...

标签: python iterator multiprocessing python-multiprocessing


【解决方案1】:

如果您只尝试执行少量任务,最好使用Process,原因已描述为here

This site 提供了一个很好的使用Process() 的教程,我发现它很有帮助。这是教程中使用您的 function() 的示例:

import multiprocessing
def function():
    for i in range(10):
        print(i)

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=function)
        jobs.append(p)
        p.start()

【讨论】:

    【解决方案2】:

    如果您没有要传入的参数,则不必使用map。您可以简单地使用 multiprocessing.Pool.apply 代替:

    import multiprocessing
    
    
    def function():
        for i in range(10):
            print(i)
    
    if __name__ == '__main__':
        p = multiprocessing.Pool(5)
        p.apply(function)
    

    【讨论】:

    • 但这只是调用该函数一次。池的意义在于同时运行多个副本,不是吗?
    猜你喜欢
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2019-07-31
    • 2014-03-24
    相关资源
    最近更新 更多