Как разделить синхронизированный список классов между процессами в многопроцессорной среде Python - PullRequest
0 голосов
/ 11 мая 2019

Как мне поделиться состоянием и синхронизировать список классов при использовании многопроцессорной обработки.

Ниже приведен пример, где я увеличиваю количество кошельков 3 человек.У всех 3 человек разные стартовые суммы.Я повторяю 10 раз и даю им по 10 раз.

import concurrent.futures
import multiprocessing as mp
from multiprocessing import Manager
from ctypes import py_object

class Wallet():

    def __init__(self, name, amount):
        self.name = name
        self.amount = amount

def give(num):

    for w in _WALLETLIST:

        # with l.get_lock():
        w.amount += num
        print("Name: ", w.name, " Amount: ", w.amount)


def init_globals(walletList):
    global _WALLETLIST
    _WALLETLIST = walletList

def main():

    wallet1 = Wallet("John", 100)
    wallet2 = Wallet("Alice", 200)
    wallet3 = Wallet("Bob", 300)
    amount_per_week = [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]

    walletList = [wallet1, wallet2, wallet3]

    mp_walletList = mp.Array(py_object, walletList)

    with concurrent.futures.ProcessPoolExecutor(initializer=init_globals, initargs=(mp_walletList,)) as executor:
        for _ in executor.map(give, amount_per_week):
            pass
    print()


if __name__ == "__main__":
    main()

В конце я ожидаю, что у Джона будет 200, у Алисы 300, а у Боба 400.

У меня естьпопробовал multiprocessing.Array, но я не нашел способ передать класс, чтобы он был общим и синхронизированным.

...