我有简单的UDPServer,它适用于多处理.
我想创建一个列表,其中包含有关所有客户端的信息.
我使用Manager,但我不明白,如何在列表中添加信息 - 我需要转移Manager的对象来处理,但是如何处理?我的新属性方式不起作用.
import multiprocessing
from socketserver import UDPServer, ForkingMixIn, DatagramRequestHandler
from socket import socket, AF_INET, SOCK_DGRAM
from settings import host, port, number_of_connections
class ChatHandler(DatagramRequestHandler):
def handle(self):
cur_process = multiprocessing.current_process()
data = self.request[0].strip()
socket = self.request[1]
ChatHandler.clients.append(self.client_address) # error here
print(ChatHandler.clients)
class ChatServer(ForkingMixIn, UDPServer):
pass
if __name__ == '__main__':
server = ChatServer((host, port), ChatHandler)
ChatHandler.clients = multiprocessing.Manager().list()
server_process = multiprocessing.Process(target=server.serve_forever)
server_process.daemon = False
server_process.start()
Run Code Online (Sandbox Code Playgroud)
如何解决?谢谢!
输出:
Exception happened during processing of request …Run Code Online (Sandbox Code Playgroud) 下面是我的代码,为此我面临着多处理问题。我看到以前有人问过这个问题,我已经尝试过这些解决方案,但似乎不起作用。有人可以帮我吗?
from multiprocessing import Pool, Manager
Class X:
def _init_():
def method1(number1,var_a, var_b, var_c, var_d):
return values
if __name__ == 'main':
for value in ["X", "Y"]:
dict_values = Manager().dict()
with Pool(1) as p:
p.starmap(method1,
[
(1, dict_values, var_a, var_b, var_c, var_d),
(2, dict_values, var_a, var_b, var_c, var_d),
(3, var_a, var_b, var_c, var_d)
])
Run Code Online (Sandbox Code Playgroud)
我面临的错误
multiprocessing.pool.RemoteTraceback:
Traceback (most recent call last):
File "/usr/lib64/python3.6/multiprocessing/managers.py", line 749, in _callmethod
conn = self._tls.connection
AttributeError: 'ForkAwareLocal' object has no attribute 'connection'
During handling of the …Run Code Online (Sandbox Code Playgroud)