Ich worte ein Multiprocessing-Programm in Python. Ich verwende multiprocessing.Manager().list()
, um die Liste innerhalb des Subprozesses freizugeben. Zuerst füge ich einige Aufgaben im Hauptprozess hinzu. Starten Sie dann einige Unterprozesse, um Aufgaben auszuführen, die in der freigegebenen Liste den Unterprozessen ebenfalls Aufgaben zur freigegebenen Liste hinzufügen. Aber ich habe eine Ausnahme wie folgt:Python Multiprocessing-Manager Liste Fehler: [Errno 2] Keine solche Datei oder Verzeichnis
Traceback (most recent call last):
File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "gen_friendship.py", line 255, in worker
if tmpu in nodes:
File "<string>", line 2, in __contains__
File "/usr/lib64/python2.6/multiprocessing/managers.py", line 722, in _callmethod
self._connect()
File "/usr/lib64/python2.6/multiprocessing/managers.py", line 709, in _connect
conn = self._Client(self._token.address, authkey=self._authkey)
File "/usr/lib64/python2.6/multiprocessing/connection.py", line 143, in Client
c = SocketClient(address)
File "/usr/lib64/python2.6/multiprocessing/connection.py", line 263, in SocketClient
s.connect(address)
File "<string>", line 1, in connect
error: [Errno 2] No such file or directory
finde ich etwas darüber, wie wie this gemeinsame Liste in Python Multiprocessing zu verwenden. Aber immer noch eine Ausnahme. Ich habe keine Ahnung von der Bedeutung der Ausnahme. Und was ist der Unterschied zwischen der allgemeinen Liste und der manager.list?
der Code wie folgt:
nodes = multiprocessing.Manager().list()
lock = multiprocessing.Lock()
AMOUNT_OF_PROCESS = 10
def worker():
lock.acquire()
nodes.append(node)
lock.release()
if __name__ == "__main__":
for i in range(i):
nodes.append({"name":"username", "group":1})
processes = [None for i in range(AMOUNT_OF_PROCESS)]
for i in range(AMOUNT_OF_PROCESS):
processes[i] = multiprocessing.Process(taget=worker, args=())
processes[i].start()
Sie müssen genug Code teilen das Problem für jedermann zu reproduzieren, Ihnen zu sagen, was hier schief ging. Es sieht so aus, als ob der Manager heruntergefahren wird, bevor Sie versuchen, es zu benutzen, aber es ist schwer zu sagen, ohne irgendeinen Code zu sehen. – dano
Sieht aus, als ob der Code UNIX-Sockets verwendet und nicht an die Socket-Datei binden kann. –
@dano der Code ist in [hier] (https://github.com/stamaimer/MrUirf/blob/master/twitter/gen_friendship.py) – stamaimer