私は特定のUDP要求に応答して潜在的に大きなファイルをコピーするアプリケーションを開発しています。私はこれらの要求を聞いて処理するためにpyuvを使用しています。これらのコピー操作を完了するために別のプロセスを作成したいので、私のメインループは保持されません。pyuvプロセスがファイルの代わりに関数を実行しています
現在、私はPythonのmultiprocessing
とpyuv
ライブラリを以下の方法で使用しています。 self.perform_action
はこのようなものになります
# Get read and write pipes from the OS
r, w = os.pipe()
# Construct pyuv reading pipe and assign callback
pipe_read = pyuv.Pipe(self.loop)
pipe_read.open(r)
pipe_read.start_read(self.read_pipe)
# Construct pyuv writing pipe
pipe_write = pyuv.Pipe(self.loop)
pipe_write.open(w)
# Keep track of pending file operations associated with the read_pipe fileno()
# Allows us to correctly close both pipes
self.pending[pipe_read.fileno()] = (msg.refDataID, msg.refDataSubID, pipe_read, pipe_write, msg.lastEventTime)
# Spawn off a process to operate on the files and write to the pipe
p = Process(target=self.perform_action, args=(pipe_write, src, dest,))
p.start()
:私は、戻り値を取得するには、パイプを使用しています
def perform_action(self, pipe, src, dest):
ret_val = self.copy_function(src, dest)
pipe.write(str(ret_val) # Write the return value to the pipe - triggers the read_pipe callback
- 私はプロセスが完了したときにコールバックが起動するようにしたいのでとも(pipe_read.start_read(self.read_pipe)
は、コールバックを割り当て何かがパイプに書き込まれるたびに)。
私はpyuv.Process
(http://pyuv.readthedocs.io/en/v1.x/process.html)モジュールを利用して上記を補完したいと思っていますが、ファイルの代わりに関数をターゲットにするためのドキュメントや例はありません。私のプロセスが終了したときにコールバックを起動し、ret_val
を返すためにパイプを使用すると、何かが間違っていると感じています。pyuv.Process
をコールして、callback(process_handle, exit_status, term_signal)
コールバックを使用するといいでしょう。
アイデア?これは可能なようですか?
ありがとうございました!正確には私が探しているものではありませんが、悪くすることができます。 – wKavey