Bonjour à tous,
En partant d'exemples tirés de "Python essential reference" de Beazley, je tache de modifier un dictionnaire, membre d'une classe via des Process lancés depuis cette même classe et...une usine à gaz.
Le Trace back est tout à fait cryptique pour moi et j'aurais besoin d'une traduction "pour les nuls".

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/python
 
# *-* coding UTF-8 *-*
 
 
from multiprocessing import Process, JoinableQueue, Lock , Manager
 
class QTest():
	def __init__(self):
		self.m=Manager()
		self.l1=Lock()
		self.l2=Lock()
		self.l3=Lock()
		self.dl={'a':self.l1,'b':self.l2,'c':self.l3,'d':self.l1,'e':self.l2,'f':self.l3,'g':self.l1,'h':self.l2,'i':self.l3,'j':self.l1}
		self.d=self.m.dict()
		self.q=JoinableQueue()
		self.cons1=Process(target=self.consumer,args=(self.q,))
		self.cons1.deamon=True
		self.cons2=Process(target=self.consumer,args=(self.q,))
		self.cons2.deamon=True
		self.prod=Process(target=self.producer,args=(['a','b','c','d','e','f','g','h','i','j'],self.q))
		self.prod.deamon=True
		self.cons1.start()
		self.cons2.start()
		self.prod.start()
		self.q.join()
 
	def consumer(self,iq):
		while True:
			item=iq.get()
			if item is None:
				break	
			self.dl[item].acquire()
			self.d[item]="done"
			self.dl[item].release()
			iq.task_done()
		print "consumer done"
		print self.d
 
	def producer(self,seq,oq):
		for item in seq:
			oq.put(item)
		oq.put(None)
		oq.put(None)
 
if __name__=='__main__':
	qt=QTest()
Dans le cas improbable où le code ne produirait pas d'erreur, voici un extrait du trace back:
Process Process-3:
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "./T3.py", line 34, in consumer
self.d[item]="done"
File "<string>", line 2, in __setitem__
File "/usr/lib/python2.6/multiprocessing/managers.py", line 722, in _callmethod
self._connect()
File "/usr/lib/python2.6/multiprocessing/managers.py", line 709, in _connect
conn = self._Client(self._token.address, authkey=self._authkey)
File "/usr/lib/python2.6/multiprocessing/connection.py", line 143, in Client
c = SocketClient(address)
File "/usr/lib/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