我有一个 python 应用程序,它创建一个子进程,打开一个套接字与之通信,然后在套接字上创建一个 multiprocessing.connection 对象。连接对象使用共享密钥(随机生成)和 hmac 来确保不允许其他进程通过连接进行通信。
在 Linux 上,这可以完美运行。在 Windows 上,我收到错误:
multiprocessing.AuthenticationError: digest received was wrong
密钥是一串随机生成的位,在通过其标准输入发送到子进程之前被腌制:
authkey = ''.join([chr(random.getrandbits(7)) for i in range(20)])
我已经仔细检查了连接两端的密钥是否匹配:
print "key:", ' '.join([str(ord(x)) for x in authkey])
服务器启动:
l = multiprocessing.connection.Listener(
('localhost', int(port)), authkey=authkey)
..客户端开始于:
c = multiprocessing.connection.Client(
('localhost', int(port)), authkey=authkey)
两个进程都在同一台机器上运行,使用相同版本的 python。
更奇怪的是,我发现如果我修复了密钥(比如 authkey='test'),那么我在第一次运行程序时仍然会收到 AuthenticationError,但在后续运行时不会。