Ich habe einen kleinen Code-Schnipsel erstellt (der ursprüngliche Code ist viel größer), die eine Funktion aufruft, die ein Objekt erstellt, sondern in einem Pool von Prozessen:Multi nicht neu erstellen nicht Objekt
import multiprocessing
class TestClass(object):
pass
def func():
obj = TestClass()
cpname = multiprocessing.current_process().name
print "{0}, Address: {1}".format(cpname, str(obj))
pool = multiprocessing.Pool(2)
results = [pool.apply_async(func) for _ in range(2)]
for res in results:
res.get()
pool.close()
pool.join()
Wenn ich laufe dieser Code, erhalte ich die folgende Ausgabe:
PoolWorker-1, Address: <__main__.TestClass object at 0x7f05d3fdad50>
PoolWorker-2, Address: <__main__.TestClass object at 0x7f05d3fdad50>
Was ich nicht verstehe ist, warum die Objekte die gleiche Adresse haben, auch wenn die in getrennten Prozessen?
Wie kann ich sicherstellen, dass jeder Prozess ein eigenes Objekt erstellt?
Vielen Dank, Ihre Hilfe.
Ich habe Ihren Code ausführen. Das Ergebnis verwirrt mich ein wenig, als Adressen immer noch die gleichen sind (oder ist das zu erwarten): 'PoolWorker-1 <__ Haupt __ Testclass-Objekt bei 0x7ffecd3c8d90.> PoolWorker-2 <__ Haupt __ Testclass-Objekt bei 0x7ffecd3c8d90.> PoolWorker -1 <__ main __. TestClass-Objekt bei 0x7ffecd3c8d90> PoolWorker-2 <__ main __. TestClass-Objekt bei 0x7ffecd3c8d90> ' – user1852692
Die Adressen werden aufgrund der virtuellen Adressierung voraussichtlich identisch sein. Wenn Sie ein Programm für Multiprocessing klonen, ändern sich die virtuellen Adressen nicht, aber der zugrunde liegende physische Speicher. – lunixbochs