エラーpickle.PicklingError python2、ソケットマルチプロセス:缶は酸洗いません

エラーpickle.PicklingError python2、ソケットマルチプロセス:缶は酸洗いません

出典:
:. 8 UTF-#coding
インポートソケット
のインポートをピクルス
インポートプロセスマルチプロセッシングから

HTML_ROOT_DIR = "" 

DEFのhandle_client(client_socketを):"" "クライアントのリクエスト" ""
 #GETクライアント要求データ
 request_data = client_socket.recv(1024) 印刷"リクエストデータ:"、request_data)設定された応答データ
 response_start_line = "HTTP / 1.1 200 OK \ R&LT \ N-ある" 
    response_headers = "サーバー:私のサーバー\ R&LT \ N-" 
    response_body = "lijizneこんにちは" 
    レスポンス= response_start_line + response_headers +」 \ R&LT \ n -で"+ response_body 
    印刷("データ応答:」、応答)#は、クライアントへの応答データを返す
 client_socket。送信(レスポンス) #近いクライアント
 client_socket.close()
__name__ == "__main__" IF:
    

    

    

    

    server_socket = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
    server_socket.bind(( ""、8000))
    server_socket.listen(128) 
一方TRUE:
        client_socket、client_address = server_socket.accept() プリント( "[%S 、%S]用户连接上了」%(client_address [0]、client_address [1]))
プリント( "[%S、%S]用户连接上了" %のclient_address)
        handle_client_process =プロセス(目標= handle_client、引数= (client_socket))
        handle_client_process.start()
        client_socket.close()
        

 

エラー:

トレースバック(最新の呼び出しの最後):
  ファイル"F:/pythontest/pythonsocket/01_static_web_server.py"、37行、<モジュール>で
    handle_client_process.start()
  ファイル"E:\ Python2 \ libに\マルチプロセッシング\ process.py"、スタートでライン130、
    self._popen = popenの(自己)
  ファイル"E:\ Python2 \ libに\マルチプロセッシング\ forking.py"、__init__でライン277、
    ダンプ(process_obj、to_child、HIGHEST_PROTOCOL)
  ファイル「E:\ Python2 \ libに\マルチプロセッシング\ forking.py」、ダンプでライン199、
    ForkingPickler(ファイル、プロトコル)の.dump(OBJ)
  ファイル"E:\ Python2 \ libに\ pickle.py"、ダンプでライン224、
    self.save(OBJ)
  ファイル"E:\ Python2 \ libに\ pickle.py"、行331、保存中
    self.save_reduce(OBJ = OBJ、* RV)
  ファイル"E:\ Python2 \ libに\ pickle.py"、save_reduceでライン419、
    (状態)の保存
  ファイル"E:\ Python2 \ libに\ pickle.py"、行286、保存中
    のF(自己、OBJ)#コール明示的な自己と結合していない方法
  ファイル"E:\ Python2 \ libに\ pickle.py"、save_dictでライン649、
    self._batch_setitems(obj.iteritems())
  ファイル"E:\ Python2 \ libに\ pickle.py"、行681 、_batch_setitems中
    (v)の保存
  ファイル"E:\ Python2 \ libに\ pickle.py"、行286、保存中に
    明示的な自己とF(自己、OBJ)#コール結合していない方法で
  ファイル「E:\ Python2 \ libに\ピクルス。 PY」、save_tupleでライン548、
    (要素)を保存
  ファイル"E:\ Python2 \ libに\ pickle.py"、行331、保存中
    self.save_reduce(OBJ = OBJ、* RV)
  ファイル"E:\ Python2 \ libに\ pickle.py"、save_reduceでライン419、
    (状態)の保存
  ファイル"E:\ Python2 \ libに\ pickle.py"、行286、保存中
    のF(自己、OBJ)#コール明示的な自己と結合していない方法
  ファイル"E:\ Python2 \ libに\ pickle.py"、save_tupleでライン548、
    (要素)を保存
  ファイル"E:\ Python2 \ libに\ pickle.py"、行286、保存中
    のF(自己、明示的な自己とOBJ)#コール結合していない方法で
  ファイル"E:\ Python2 \ libに\ pickle.py"、行649は、save_dictで
    self._batch_setitems(obj.iteritems())
  ファイル「E:\ Python2 \ libに\ピクルス。 「_batch_setitemsで、ライン681、PY
    (V)の保存
  Eファイル":\ Python2 \ libに\ pickle.py"、保存中のライン286、
    F(自己、明示的な自己とOBJ)#コール結合していない方法
  ファイル"E:\ Python2 \ libに\ pickle.py"、行748、中save_global
    (OBJ、モジュール、名前))
pickle.PicklingError:できませんピクルス<ビルトイン_socket.socketオブジェクトのメソッドrecvfrom_into 0x0000000002562370で>:それは、__ __mainとして見られないです。recvfrom_into

 

ソリューション:

stackoverflowの上の答えが見つかり、その理由は、ソケットオブジェクトをシリアライズすることはできませんしながら、Windowsオペレーティングシステム、Windowsは、マルチプロセスは、複数のプロセス間の転送データへのピクルスシリアル化を使用してマルチプロセッシングいるためであるが、LinuxでLinuxのマルチプロセスにフォークを使用してマルチプロセッシングので、システムは問題を操作しないので、窓は、複数のスレッドを使用することができます。ネットワークトラフィックがIO集中型の操作に属するので、CPUの計算はマルチプロセス、ライン上のマルチスレッドはありません、質問しません。

 

参考文献:

https://stackoverflow.com/questions/33064982/how-can-i-shred-socket-object-over-python-multiprocess-it-raises-eoferror

https://github.com/dpkp/kafka-python/issues/46

https://docs.python.org/2/library/multiprocessing.html#windows

 

おすすめ

転載: www.cnblogs.com/leijiangtao/p/11927235.html