Патриот Израиля,
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.
#!/usr/bin/env python
import traceback
from multiprocessing import Process
from multiprocessing.connection import Listener
class Worker(Process):
def __init__(self, conn):
super().__init__()
self.daemon=True
self.conn = conn
def run(self):
while 1:
try:
data = self.conn.recv()
except Exception:
traceback.print_exc()
break
print('received:', data)
self.conn.send('OK')
if __name__ == '__main__':
listener = Listener(('localhost', 9000), authkey=b'secret')
while 1:
try:
conn = listener.accept()
Worker(conn).start()
except Exception:
traceback.print_exc()
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
#!/usr/bin/env python
from multiprocessing import Pool
from multiprocessing.connection import Client
def test_client(i):
conn = Client(('localhost', 9000), authkey=b'secret')
conn.send('hello from client #{}'.format(i))
data = conn.recv()
return (i, data)
if __name__ == '__main__':
# for i in range(10):
# conn = Client(('localhost', 9000), authkey=b'secret')
# conn.send('hello from client #{}'.format(i))
# data = conn.recv()
# print(i, data)
p = Pool()
results = p.map(test_client, range(10))
print(results)
p.close()
p.join()
Вывод сервера:
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. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264.
$ ./server.py
received: hello from client #1
received: hello from client #2
received: hello from client #0
connection closed
connection closed
connection closed
received: hello from client #8
connection closed
received: hello from client #9
connection closed
received: hello from client #4
received: hello from client #3
received: hello from client #6
connection closed
connection closed
connection closed
received: hello from client #7
connection closed
^CTraceback (most recent call last):
File "./server.py", line 26, in <module>
conn = listener.accept()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 453, in accept
c = self._listener.accept()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 593, in accept
s, self._last_accepted = self._socket.accept()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/socket.py", line 205, in accept
fd, addr = self._accept()
KeyboardInterrupt
(py3) sergey@sergey-Lenovo-Y520-15IKBN:~/code/threads_and_processes/multiprocessing_server$ ./server.py
received: hello from client #1
received: hello from client #0
connection closed
connection closed
received: hello from client #2
connection closed
received: hello from client #8
received: hello from client #9
connection closed
connection closed
received: hello from client #6
connection closed
received: hello from client #5
connection closed
^CTraceback (most recent call last):
File "./server.py", line 26, in <module>
try:
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 453, in accept
c = self._listener.accept()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 593, in accept
s, self._last_accepted = self._socket.accept()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/socket.py", line 205, in accept
fd, addr = self._accept()
KeyboardInterrupt
(py3) sergey@sergey-Lenovo-Y520-15IKBN:~/code/threads_and_processes/multiprocessing_server$ ./server.py
received: hello from client #0
received: hello from client #2
received: hello from client #1
Traceback (most recent call last):
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
Traceback (most recent call last):
EOFError
EOFError
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
received: hello from client #9
received: hello from client #8
Traceback (most recent call last):
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
EOFError
received: hello from client #3
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
received: hello from client #4
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
received: hello from client #6
received: hello from client #7
Traceback (most recent call last):
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
EOFError
received: hello from client #5
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
received: hello from client #2
received: hello from client #0
received: hello from client #1
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
Traceback (most recent call last):
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
EOFError
received: hello from client #8
received: hello from client #9
Traceback (most recent call last):
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
EOFError
received: hello from client #4
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
received: hello from client #5
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
received: hello from client #6
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
received: hello from client #7
Traceback (most recent call last):
File "./server.py", line 16, in run
data = self.conn.recv()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
buf = self._recv(4)
File "/home/sergey/.pyenv/versions/3.6.5/lib/python3.6/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
Только раз сработало нормально:
1. 2.
$ ./test.py
[(0, 'OK'), (1, 'OK'), (2, 'OK'), (3, 'OK'), (4, 'OK'), (5, 'OK'), (6, 'OK'), (7, 'OK'), (8, 'OK'), (9, 'OK')]
Когда запросы пришли в порядке очередности.
|