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)
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.
Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.