Передача прокси-объектов (функций) с предварительно установленными переменными из основной программы в подпроцессы с использованием Process или Pool Multiprocessing в Python - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над интерфейсом PyQt5 с некоторыми вычислительными функциями в качестве бэкэнда.Программа берет некоторые входные данные из графического интерфейса и генерирует математические функции, а затем передается в подсчет серверной части, где я использовал многопроцессорность.Проблема в том, что подпроцессы или пул, вместо того, чтобы принимать измененные математические функции, они принимают исходные функции.Я перепробовал десятки методов, но ни один из них не работал, и большинство из них сосредоточены на том, как извлекать объекты из подпроцессов, а не в обратном порядке.

Я просто воспроизвел его.Надеюсь, что кто-нибудь найдет решение или предложит другие способы архивации параллелизма.Большое спасибо заранее.

import multiprocessing as mp
from multiprocessing.managers import BaseManager

class test_f():
    def __init__(self,a):
        global b
        b=a

    def f1(self,l):
        return b*l
    def f2(self,l):
        return b*b*l

    def get(self):
        return b
class MyManager(BaseManager):
     pass

MyManager.register('func',test_f)


def cal(para):
    #with lock:
    x=para[0]
    func=para[1]

    #setup(k.value)
    print(func,a)
    print(func.f1(x)+func.f2(x))


if __name__=='__main__':

    manager=MyManager()
    manager.start()
    func=manager.func(2)
    p = mp.Process(target=cal, args=[(1,func),])
    p.start()
    p.join()
...