Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Có một biến thể của pool.map hỗ trợ nhiều đối số?

Python 3.3 bao gồm phương thức

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
6:

#!/usr/bin/env python3
from functools import partial
from itertools import repeat
from multiprocessing import Pool, freeze_support

def func(a, b):
    return a + b

def main():
    a_args = [1,2,3]
    second_arg = 1
    with Pool() as pool:
        L = pool.starmap(func, [(1, 1), (2, 1), (3, 1)])
        M = pool.starmap(func, zip(a_args, repeat(second_arg)))
        N = pool.map(partial(func, b=second_arg), a_args)
        assert L == M == N

if __name__=="__main__":
    freeze_support()
    main()

Cho các phiên bản cũ hơn:

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()

Đầu ra

1 1
2 1
3 1

Lưu ý cách

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
7 và
import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
8 được sử dụng ở đây.

Do lỗi được đề cập bởi @unutbu, bạn không thể sử dụng

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
9 hoặc các khả năng tương tự trên Python 2.6, do đó, chức năng trình bao bọc đơn giản
import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
0 nên được xác định rõ ràng. Xem thêm Cách giải quyết được đề xuất bởi
import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
1.

Đã trả lời ngày 26 tháng 3 năm 2011 lúc 17:24Mar 26, 2011 at 17:24

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

JFSJFSjfs

385K183 Huy hiệu vàng949 Huy hiệu bạc1624 Huy hiệu đồng183 gold badges949 silver badges1624 bronze badges

14

Câu trả lời cho điều này là phụ thuộc vào phiên bản và tình huống. Câu trả lời chung nhất cho các phiên bản gần đây của Python (kể từ 3.3) được mô tả lần đầu tiên dưới đây bởi J.F. Sebastian.1 Nó sử dụng phương pháp

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
2, chấp nhận một chuỗi các bộ đếm đối số. Sau đó, nó tự động giải nén các đối số khỏi mỗi tuple và chuyển chúng đến chức năng đã cho:

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...

Đối với các phiên bản trước của Python, bạn sẽ cần viết một hàm trợ giúp để giải nén các đối số một cách rõ ràng. Nếu bạn muốn sử dụng

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
3, bạn cũng sẽ cần viết trình bao bọc để biến
import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
4 thành trình quản lý ngữ cảnh. (Cảm ơn Muon đã chỉ ra điều này.)

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...

Trong các trường hợp đơn giản hơn, với một đối số thứ hai cố định, bạn cũng có thể sử dụng

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
5, nhưng chỉ trong Python 2.7+.

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...

1. Phần lớn điều này được truyền cảm hứng từ câu trả lời của anh ấy, có lẽ nên được chấp nhận thay thế. Nhưng vì cái này bị mắc kẹt ở đầu, nên có vẻ tốt nhất để cải thiện nó cho độc giả trong tương lai.

Đã trả lời ngày 26 tháng 3 năm 2011 lúc 14:36Mar 26, 2011 at 14:36

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

người gửisenderle

Huy hiệu vàng 140K3535 gold badges206 silver badges231 bronze badges

9

Tôi nghĩ rằng dưới đây sẽ tốt hơn:

def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results

Đầu ra

[3, 5, 7]

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Lưu ý cách

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
7 và
import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
8 được sử dụng ở đây.Jan 15, 2014 at 6:01

Do lỗi được đề cập bởi @unutbu, bạn không thể sử dụng

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
9 hoặc các khả năng tương tự trên Python 2.6, do đó, chức năng trình bao bọc đơn giản
import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
0 nên được xác định rõ ràng. Xem thêm Cách giải quyết được đề xuất bởi
import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
1.imotai

Đã trả lời ngày 26 tháng 3 năm 2011 lúc 17:241 gold badge11 silver badges9 bronze badges

6

JFSJFSPython 3.3+ with

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
6

from multiprocessing.dummy import Pool as ThreadPool 

def write(i, x):
    print(i, "---", x)

a = ["1","2","3"]
b = ["4","5","6"] 

pool = ThreadPool(2)
pool.starmap(write, zip(a,b)) 
pool.close() 
pool.join()

Result:

1 --- 4
2 --- 5
3 --- 6

385K183 Huy hiệu vàng949 Huy hiệu bạc1624 Huy hiệu đồng

Câu trả lời cho điều này là phụ thuộc vào phiên bản và tình huống. Câu trả lời chung nhất cho các phiên bản gần đây của Python (kể từ 3.3) được mô tả lần đầu tiên dưới đây bởi J.F. Sebastian.1 Nó sử dụng phương pháp

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
2, chấp nhận một chuỗi các bộ đếm đối số. Sau đó, nó tự động giải nén các đối số khỏi mỗi tuple và chuyển chúng đến chức năng đã cho:constant value passed as an argument:

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
0

Đối với các phiên bản trước của Python, bạn sẽ cần viết một hàm trợ giúp để giải nén các đối số một cách rõ ràng. Nếu bạn muốn sử dụng

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
3, bạn cũng sẽ cần viết trình bao bọc để biến
import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
4 thành trình quản lý ngữ cảnh. (Cảm ơn Muon đã chỉ ra điều này.)return something:

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
1

Trong các trường hợp đơn giản hơn, với một đối số thứ hai cố định, bạn cũng có thể sử dụng

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
5, nhưng chỉ trong Python 2.7+.

1. Phần lớn điều này được truyền cảm hứng từ câu trả lời của anh ấy, có lẽ nên được chấp nhận thay thế. Nhưng vì cái này bị mắc kẹt ở đầu, nên có vẻ tốt nhất để cải thiện nó cho độc giả trong tương lai.Mar 10, 2015 at 22:24

user136036user136036user136036

Đã trả lời ngày 26 tháng 3 năm 2011 lúc 14:366 gold badges43 silver badges46 bronze badges

2

người gửi

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
2

lpd11

Huy hiệu vàng 140K351 silver badge7 bronze badges

Tôi nghĩ rằng dưới đây sẽ tốt hơn:Dec 25, 2017 at 11:44

Đã trả lời ngày 15 tháng 1 năm 2014 lúc 6:01Dane Lee

imotaiimotai11 silver badges14 bronze badges

4

1.9161 Huy hiệu vàng11 Huy hiệu bạc9 Huy hiệu đồng

Sử dụng Python 3.3+ với

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
6

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
3

Bạn cũng có thể zip () thêm đối số nếu bạn thích:

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
7

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
4

Trong trường hợp bạn muốn có một giá trị không đổi được thông qua như một đối số:

Trong trường hợp chức năng của bạn sẽ trả về một cái gì đó:

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
5

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Điều này đưa ra một danh sách với các giá trị được trả về.Jan 22, 2014 at 20:05

Đã trả lời ngày 10 tháng 3 năm 2015 lúc 22:24zeehio

10.1k6 Huy hiệu vàng43 Huy hiệu bạc46 Huy hiệu đồng2 gold badges37 silver badges46 bronze badges

0

Cách thực hiện nhiều đối số:

1331 Huy hiệu bạc7 Huy hiệu đồng

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
6

Đã trả lời ngày 25 tháng 12 năm 2017 lúc 11:44

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
7

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Dane Leedane LeeJan 20, 2014 at 20:37

1.85411 huy hiệu bạc14 Huy hiệu đồngMike McKerns

Đã biết về itertools trong câu trả lời của J.F. của các đối số vị trí.8 gold badges113 silver badges138 bronze badges

4

Cài đặt

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
8

Đầu ra

#!/usr/bin/env python2
import itertools
from multiprocessing import Pool, freeze_support

def func(a, b):
    print a, b

def func_star(a_b):
    """Convert `f([1,2])` to `f(1,2)` call."""
    return func(*a_b)

def main():
    pool = Pool()
    a_args = [1,2,3]
    second_arg = 1
    pool.map(func_star, itertools.izip(a_args, itertools.repeat(second_arg)))

if __name__=="__main__":
    freeze_support()
    main()
9

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Cách song song hóa:May 23, 2017 at 10:11

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Tôi đã tải lên Parmap lên Pypi và một kho lưu trữ GitHub.xmduhan

Ví dụ, câu hỏi có thể được trả lời như sau:11 silver badges14 bronze badges

Đã trả lời ngày 22 tháng 1 năm 2014 lúc 20:05

Zeehiozeehio

3,8742 huy hiệu vàng37 Huy hiệu bạc46 Huy hiệu đồng

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Có một ngã ba

def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
1 được gọi là Pathos (Lưu ý: Sử dụng phiên bản trên GitHub) không cần
def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
0 - các hàm bản đồ phản ánh API cho bản đồ của Python, do đó MAP có thể có nhiều đối số.Mar 13, 2014 at 21:55

Với

def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
3, bạn cũng thường có thể thực hiện đa xử lý trong trình thông dịch, thay vì bị kẹt trong khối
def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
4. Pathos là do một bản phát hành, sau khi cập nhật nhẹ - chủ yếu là chuyển đổi sang Python 3.x.Adobe

def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
3 có một số cách mà bạn có thể có được hành vi chính xác của
def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
0.8 gold badges83 silver badges123 bronze badges

4

Đã trả lời ngày 20 tháng 1 năm 2014 lúc 20:37decorator instead of writing a wrapper function by hand. Especially when you have a lot of functions to map, a decorator will save your time by avoiding writing a wrapper for every function. Usually a decorated function is not picklable, however we may use

def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
7 to get around it. More discussions can be found here.

Mike McKernsmike McKerns

1 1
2 1
3 1
1

32.1k8 Huy hiệu vàng113 Huy hiệu bạc138 Huy hiệu đồng

1 1
2 1
3 1
2

Một giải pháp tốt hơn cho Python & NBSP; 2:

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Đã trả lời ngày 23 tháng 5 năm 2017 lúc 10:11May 29, 2016 at 1:17

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

xmduhanxmduhanSyrtis Major

83011 Huy hiệu bạc14 Huy hiệu đồng1 gold badge27 silver badges39 bronze badges

3

Một cách khác là chuyển danh sách các danh sách cho thói quen một đối số:

1 1
2 1
3 1
3

Sử dụng chức năng

def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
9 với danh sách các đối số
[3, 5, 7]
0,
[3, 5, 7]
1 và
[3, 5, 7]
2 như sau:

1 1
2 1
3 1
4

Đã trả lời ngày 27 tháng 6 năm 2014 lúc 7:42Jun 27, 2014 at 7:42

M. Toyam. ToyaM. Toya

5957 Huy hiệu bạc23 Huy hiệu Đồng7 silver badges23 bronze badges

Một giải pháp thay thế đơn giản khác là bọc các tham số chức năng của bạn trong một bộ thuật và sau đó bọc các tham số nên được truyền trong các bộ dữ liệu. Điều này có lẽ không lý tưởng khi xử lý các phần lớn dữ liệu. Tôi tin rằng nó sẽ tạo ra các bản sao cho mỗi tuple.

1 1
2 1
3 1
5

Cung cấp đầu ra theo một số thứ tự ngẫu nhiên:

1 1
2 1
3 1
6

Đã trả lời ngày 21 tháng 11 năm 2016 lúc 7:16Nov 21, 2016 at 7:16

Alex Klibiszalex KlibiszAlex Klibisz

1.2841 Huy hiệu vàng14 Huy hiệu bạc20 Huy hiệu Đồng1 gold badge14 silver badges20 bronze badges

1

Đây là một cách khác để làm điều đó rằng IMHO đơn giản và thanh lịch hơn bất kỳ câu trả lời nào khác được cung cấp.

Chương trình này có một chức năng lấy hai tham số, in chúng ra và cũng in tổng số:

1 1
2 1
3 1
7

đầu ra là:

1 1
2 1
3 1
8

Xem tài liệu Python để biết thêm thông tin:

https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.pool

Đặc biệt, hãy chắc chắn kiểm tra chức năng

def multi_run_wrapper(args):
   return add(*args)

def add(x,y):
    return x+y

if __name__ == "__main__":
    from multiprocessing import Pool
    pool = Pool(4)
    results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)])
    print results
0.

Tôi đang sử dụng Python 3.6, tôi không chắc liệu điều này có hoạt động với các phiên bản Python cũ hơn không

Tại sao không có một ví dụ rất đơn giản như thế này trong tài liệu, tôi không chắc chắn.

Đã trả lời ngày 24 tháng 1 năm 2020 lúc 19:37Jan 24, 2020 at 19:37

Cdahmscdahmscdahms

3.0749 Huy hiệu vàng44 Huy hiệu bạc71 Huy hiệu đồng9 gold badges44 silver badges71 bronze badges

Từ Python 3.4.4, bạn có thể sử dụng MultiProcessing.get_context () để có được đối tượng ngữ cảnh để sử dụng nhiều phương thức bắt đầu:

1 1
2 1
3 1
9

Hoặc bạn chỉ đơn giản là thay thế

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
0

with:

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
1

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Đã trả lời ngày 27 tháng 5 năm 2016 lúc 10:52May 27, 2016 at 10:52

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Tung Nguyễn năng NguyễnTung Nguyen

1.4282 Huy hiệu vàng17 Huy hiệu bạc13 Huy hiệu đồng2 gold badges17 silver badges13 bronze badges

Trong tài liệu chính thức nói rằng nó chỉ hỗ trợ một đối số có thể lặp lại. Tôi thích sử dụng Ứng dụng_async trong những trường hợp như vậy. Trong trường hợp của bạn, tôi sẽ làm:

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
2

Đã trả lời ngày 2 tháng 4 năm 2017 lúc 6:34Apr 2, 2017 at 6:34

roj4sroj4sroj4s

2211 Huy hiệu bạc8 Huy hiệu đồng1 silver badge8 bronze badges

1

Có nhiều câu trả lời ở đây, nhưng dường như không có câu trả lời nào cung cấp mã tương thích Python 2/3 sẽ hoạt động trên bất kỳ phiên bản nào. Nếu bạn muốn mã của mình chỉ hoạt động, điều này sẽ hoạt động cho phiên bản Python:

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
3

Sau đó, bạn có thể sử dụng đa xử lý Python 3 thông thường, tuy nhiên bạn thích. Ví dụ:

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
4

sẽ làm việc trong Python 2 hoặc Python 3.

Đã trả lời ngày 16 tháng 2 năm 2019 lúc 4:56Feb 16, 2019 at 4:56

Cgnorthcuttcgnorthcuttcgnorthcutt

3.64233 Huy hiệu bạc39 Huy hiệu đồng33 silver badges39 bronze badges

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
5

Đã trả lời ngày 15 tháng 10 năm 2018 lúc 23:21Oct 15, 2018 at 23:21

JaimejaimeJaime

Huy hiệu đồng 2111 bronze badge

Đây là một ví dụ về thói quen mà tôi sử dụng để chuyển nhiều đối số cho hàm một đối số được sử dụng trong Fork.imap Fork:

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
6

Đã trả lời ngày 23 tháng 1 năm 2019 lúc 11:53Jan 23, 2019 at 11:53

Đây có thể là một lựa chọn khác. Bí quyết là trong hàm

[3, 5, 7]
4 trả về một hàm khác được truyền vào
[3, 5, 7]
5. Mã bên dưới đọc một mảng đầu vào và cho mỗi phần tử (duy nhất) trong đó, trả về số lần (tức là số lượng) phần tử đó xuất hiện trong mảng, ví dụ nếu đầu vào là

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
7

Sau đó không xuất hiện 6 lần và một lần 3 lần

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
8

Bạn nên nhận được:

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
9

Đã trả lời ngày 15 tháng 11 năm 2020 lúc 13:26Nov 15, 2020 at 13:26

AenaonaenaonAenaon

2.9094 Huy hiệu vàng28 Huy hiệu bạc56 Huy hiệu Đồng4 gold badges28 silver badges56 bronze badges

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
0

Đã trả lời ngày 9 tháng 7 năm 2021 lúc 14:47Jul 9, 2021 at 14:47

1

Lưu trữ tất cả các đối số của bạn như một mảng các bộ dữ liệu.

Ví dụ nói rằng bạn thường gọi chức năng của mình là:

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
1

Thay vào đó hãy vượt qua một tuple và giải nén các đối số:

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
2

Xây dựng bộ tuple bằng cách sử dụng một vòng lặp trước:

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
3

Sau đó thực thi tất cả bằng cách sử dụng bản đồ bằng cách chuyển mảng của bộ dữ liệu:

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
4

Tôi biết Python có

[3, 5, 7]
6 và
[3, 5, 7]
7 để giải nén, nhưng tôi chưa thử chúng.

Cũng tốt hơn để sử dụng tương lai đồng thời thư viện cấp cao hơn so với thư viện đa xử lý cấp thấp.

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Đã trả lời ngày 19 tháng 6 năm 2021 lúc 15:16Jun 19, 2021 at 15:16

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Đối với Python & nbsp; 2, bạn có thể sử dụng thủ thuật này

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
5

Hướng dẫn how do you pass multiple arguments in pool map python? - làm thế nào để bạn vượt qua nhiều đối số trong python map pool?

Đã trả lời ngày 18 tháng 5 năm 2018 lúc 4:06May 18, 2018 at 4:06

Hz Thượng Hải ThươngHz Shang

Huy hiệu đồng 951 Bạc8 Huy hiệu Đồng1 silver badge8 bronze badges

1

Bản đồ có thể lấy nhiều đối số không?

Chức năng bản đồ chỉ hỗ trợ các chức năng ánh xạ có một đối số duy nhất.Điều này có nghĩa là nếu bạn muốn ánh xạ qua một hàm mong đợi nhiều đối số, bạn không thể sử dụng nó.. This means that if you want to map over a function which expects multiple arguments you can't use it.

Bản đồ nhóm đa xử lý là gì?

Đa xử lý.hồ bơi.Pool Process Pool cung cấp một phiên bản của hàm Bản đồ () trong đó hàm đích được gọi cho từng mục trong song song được cung cấp.Một tương đương song song của hàm tích hợp bản đồ () [[]].Nó chặn cho đến khi kết quả đã sẵn sàng.provides a version of the map() function where the target function is called for each item in the provided iterable in parallel. A parallel equivalent of the map() built-in function […]. It blocks until the result is ready.

Làm thế nào để bạn sử dụng Starmap đa xử lý?

Bạn có thể ánh xạ một hàm có nhiều đối số cho các tác vụ trong nhóm quy trình thông qua phương thức pool starmap () ...
task(1,2).
task(3,4).
task(5,6).

Python đa xử lý hồ bơi là gì?

Nhóm đa xử lý Python có thể được sử dụng để thực hiện song song một hàm trên nhiều giá trị đầu vào, phân phối dữ liệu đầu vào trên các quy trình (song song dữ liệu).can be used for parallel execution of a function across multiple input values, distributing the input data across processes (data parallelism).