Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python 3.5 Instancier et manipuler un objet

    28 décembre 2016 à 12:49:58

    Bonjour, Je suis à la recherche d'une solution pour pouvoir instancier un objet qui va exploiter un autre coeur de cpu tout en le manipulant à partir d'un autre processus.
    Actuellement, la seule solution que j'ai trouvée est d'utiliser pickle.
    Mais :
    1) Mais je trouve cette solution peu performante
    2) Je ne peux pas par exemple créer une fenêtre tkinter dans mon objet
    voici mon code, auriez-vous des solutions plus optimales à m'offrir ?
      
    import multiprocessing as m
    import pickle
      
    class Store:
        pass
      
    class Shareable:
        def __init__(self, size = 2**10):
            object.__setattr__(self, 'store', m.Array('B', size))
            o = Store() # This object will hold all shared values
            s = pickle.dumps(o)
            store(object.__getattribute__(self, 'store'), s)
      
        def __getattr__(self, name):
            s = load(object.__getattribute__(self, 'store'))
            o = pickle.loads(s)
            return getattr(o, name)
      
        def __setattr__(self, name, value):
            s = load(object.__getattribute__(self, 'store'))
            o = pickle.loads(s)
            setattr(o, name, value)
            s = pickle.dumps(o)
            store(object.__getattribute__(self, 'store'), s)
      
    def store(arr, s):
        for i, ch in enumerate(s):
            arr[i] = ch
      
    def load(arr):
        l = arr[:]
        return bytes(arr)
      
    class Foo(Shareable):
        def __init__(self):
            super().__init__()
            self.f = 1
            self.f2 = 1
            self.mylist=[0,1,2,3,4,5,6]
      
        def foo(self):
            self.f += 1
            """while True:
                self.f2+=1"""
      
    def Otherprocess(s):
        print("Process2 :")
        print(s.f)
        s.mylist=[0]
        """while True:
            s.f2+=1"""
      
    if __name__ == '__main__':
        import multiprocessing as m
        import time
        s = Foo()
        print(s.f)
        p = m.Process(target=s.foo, args=())
        p.start()
        #p.join()
        p2 = m.Process(target=Otherprocess, args=(s,))
        p2.start()
        time.sleep(1)
        print("Process1 :")
        print(s.f)
        print(s.mylist)
    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2016 à 3:04:48

      Pourquoi ne pourrais tu pas créer de fenêtre ?
      • Partager sur Facebook
      • Partager sur Twitter

      Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.

      Python 3.5 Instancier et manipuler un objet

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown