python многопроцессорная __getnewargs __ () - PullRequest
0 голосов
/ 15 марта 2020
import multiprocessing
import time

data = (
    ['a', '2'], ['b', '4'], ['c', '6'], ['d', '8'],
    ['e', '1'], ['f', '3'], ['g', '5'], ['h', '7']
)

def mp_worker(inputs, the_time):
    print(" Processs %s\tWaiting %s seconds" % (inputs, the_time))
    time.sleep(int(the_time))
    print(" Process %s\tDONE" % inputs)

def mp_handler():
    p = multiprocessing.Pool(2)
    p.map(mp_worker, data)

if __name__ == '__main__':
    mp_handler()

этот код не работает под 3 python, суть в том, что он мне подходит, но ругается на TypeError: mp_worker () отсутствует 1 обязательный позиционный аргумент: 'the_time'

googled getnewargs ( ), как использовать его в этом коде неясно, python знаю пару месяцев.

Ответы [ 2 ]

1 голос
/ 15 марта 2020

Вам нужно использовать starmap вместо map для передачи нескольких аргументов функции из кортежей. Из Python документации :

Как и map() за исключением того, что элементы iterable должны быть итерациями, которые распаковываются как аргументы.

Следовательно, итерация из [(1,2), (3, 4)] приводит к [func(1,2), func(3,4)].

0 голосов
/ 15 марта 2020
pool.map(f, a) 

заменить

pool.starmap(f, a)

исправлено, спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...