了解python中的ssl和多处理模块的互操作性

时间:2018-06-19 14:51:25

标签: python ssl multiprocessing

我无法将SSLSocketsmultiprocessing.Process.start()一起使用。我想在SSL套接字上每次收到请求时派生新进程。我问了问题,并亲自here回答了问题。多处理代码如下:

process = mup.Process(target=worker_ssl, args=(data_socket, client_address))            
process.daemon = True
process.start()

其中data_socketSSLSocket对象。我遇到以下错误:

17        ForkingPickler(file, protocol).dump(obj)
18      File "D:\Programs\python\python-3.6.6-amd64\lib\socket.py", line 185, in __getstate__
19        raise TypeError("Cannot serialize socket object")
20    TypeError: Cannot serialize socket object

似乎SSLSockets无法序列化。我最终使用了os.fork

但是,现在我在python ssl模块页面上遇到了following paragraph

  

如果将此模块用作多处理应用程序的一部分(使用,   例如multiprocessingconcurrent.futures模块),   注意OpenSSL的内部随机数生成器不会   正确处理分支过程。应用程序必须更改PRNG   父进程的状态(如果他们将任何SSL功能与   os.fork()RAND_add()RAND_bytes()或   RAND_pseudo_bytes()就足够了。

它说明了multiprocessingos.fork()两者。但我无法理解其中任何一个。我也发现这篇文章谈论的是相同的。它说我应该为每个进程提供新的SSL连接。但是我不知道该怎么做。我在os.fork()上的代码运行正常。但是,如果我在同时使用multiprocessingos.fork来实现ssl时缺少一些要考虑的问题,那么上面的内容将使我感到担忧。有人可以详细说明上一段的确切含义,以及应该如何(理想)使用multiprocessingos.fork实现ssl吗?

0 个答案:

没有答案