Python'da çok işlemli bir programla çalışıyorum. Alt süreç içinde liste paylaşmak için multiprocessing.Manager().list()
kullanıyorum. İlk önce, ana süreçte bazı görevler ekliyorum. Ve sonra, bazı alt işlemlerin, paylaşılan listedeki alt işlemlerin de paylaşılan listeye görevler ekleyen görevleri yapmak için başlatın. Ama aşağıdaki gibi bir istisna var:python çoklu işlem yöneticisi listesi hatası: [Errno 2] Böyle bir dosya veya dizin yok
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
Ben this gibi piton çoklu işlem paylaşılan listeyi nasıl kullanılacağı hakkında bir şeyler bulabilirsiniz. Ama yine de bazı istisnalar var. İstisnenin anlamı hakkında hiçbir fikrim yok. Ve ortak liste ile manager.list arasındaki fark nedir? aşağıdaki gibi
kodu:
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()
Burada neyin yanlış gittiğini söylemek herkes için sorunu yeniden oluşturmak için yeterli kod paylaşmanız gerekmektedir. Kullanmaya çalışmadan önce yönetici kapatılmış gibi görünüyor, ancak herhangi bir kod görmeden söylemek zor. – dano
Kod, UNIX yuvalarını kullanıyor ve soket dosyasına bağlanılamıyor gibi görünüyor. –
@dano kodu [burada] (https://github.com/stamaimer/MrUirf/blob/master/twitter/gen_friendship.py) – stamaimer