私はマルチターンの竜巻Webサーバーを持っています。バックグラウンドでいくつかのことを行う別のプロセスを作成したいと思います。竜巻Webサーバーでプロセスを作成する
私はコード
start_background_process
app = Application([<someurls>])
server = HTTPServer(app)
server.bind(8888)
server.start(4) # Forks multiple sub-processes
IOLoop.current().start()
def start_background_process():
process = multiprocessing.Process(target=somefunc)
process.start()
、すべてが素晴らしい働いている次のようにサーバーを持っています。しかし 私は(CRTL cでまたは信号を送る)サーバーを閉鎖しようと 私はこの問題の原因を理解AssertionError: can only join a child process
を得る: 私はマルチプロセスとプロセスのコールをプロセスを作成する方法 に参加しています「atexit」に登録されています。竜巻はシンプルなフォークを実行するため、すべての子どもも作成したプロセスの結合メソッドを呼び出します。プロセスは兄弟であり、息子ではないのでできません。 それでは、どのように通常どおりに竜巻でプロセスを開くことができますか?
あなたの答えをありがとう。本当に良い:) –
答えをありがとうが、あなたの答えでは、4つのバックグラウンドプロセスを開きませんか?私は1つだけ開きたいと思うなぜ私は開始前にそれをした – kill129
ええ、それは正しいです。その場合、私は[Process Pool](https://docs.python.org/2/library/multiprocessing.html?highlight=pool#module-multiprocessing.pool)の使用を提案していました。 2つのワーカープロセス 'pool = multiprocessing.Pool(2)'を作成し、 'somefunc'を' pool.apply_async(method_on_sub_process、()) 'と呼び、' second'を使ってあなたの竜巻サーバのインスタンス化を呼び出すことができます。キーボード割り込みでは、 'poll.terminate()'を使ってワーカープロセスを終了させることができます。私はいくつかの助けになったことを願っている。 – afxentios