Search code examples
pythoniteratormultiprocessingpython-multiprocessing

How do you use Python Multiprocessing for a function with zero positional arguments?


Here is an example:

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

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

yields the error: TypeError: map() missing 1 required positional argument: 'iterable'

The function does not need any input, so I wish to not artificially force it to. Or does multiprocessing need some iterable?

The following code returns / prints nothing. Why?

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

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

Solution

  • If you have no arguments to pass in, you don't have to use map. You can simply use multiprocessing.Pool.apply instead:

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