Многократная обработка Python с несколькими аргументами для цикла for - PullRequest
0 голосов
/ 19 сентября 2019

У меня проблемы с моделью многократной обработки.при передаче одного аргумента с циклом for мой код работает:

def job(a):
    pass

p = Pool()
res = [p.apply_async(job, (a,)) for a in A]
p.close()
p.join()

При передаче нескольких аргументов с циклом for я не смог заставить его работать.Возможно ли это?

def job(a, b, c, d):
    pass

p = Pool()
res = [p.apply_async(job, (a,), (b, c, d) for a in A]  #??
p.close()
p.join()

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Как насчет использования multiprocessing.Pool?Он будет перебирать ваш ввод и с помощью partial вы можете передать ему больше аргументов.как это:

import multiprocessing
from functools import partial


def job(a, b, c):
    print("{} - {} - {}".format(a, b, c))

def main():
    iterable = [1, 2, 3, 4, 5, 6]
    pool = multiprocessing.Pool(processes=3)
    func = partial(job, "static arg1", "static arg2")
    pool.map(func, iterable)
    pool.close()
    pool.join()

if __name__ == "__main__":
    main()

вывод будет:

static arg1 - static arg2 - 1
static arg1 - static arg2 - 2
static arg1 - static arg2 - 3
static arg1 - static arg2 - 4
static arg1 - static arg2 - 5
static arg1 - static arg2 - 6
0 голосов
/ 19 сентября 2019

Я думаю, что есть синтаксис.Попробуйте это:

 res = [p.apply_async(job,(a,b,c,d)) for a in A]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...