Hello, I am looking for a solution to be able to instantiate an object that will exploit another heart of cpu all by manipulating it from another process.
Currently the only solution I found is to use pickle.
But :
1) But I find this solution low performing
2) I can not for example create a tkinter window in my object
This is my code, Would you have more optimal solutions to offer me ?
Currently the only solution I found is to use pickle.
But :
1) But I find this solution low performing
2) I can not for example create a tkinter window in my object
This is my code, Would you have more optimal solutions to offer me ?
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)
