我正在开发一个应用程序,它涉及复制潜在的大文件以响应某些UDP请求。我正在使用pyuv来监听和处理这些请求,并希望生成一个单独的进程来完成这些复制操作,这样我的主循环就不会被阻止。
目前我正在以下列方式使用python的if($('p > span:nth-of-type(2)').length) {
$('p > span:nth-of-type(1)').css('color','red');
}
和multiprocessing
库。
pyuv
# 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()
看起来像这样:
self.perform_action
我正在使用管道来获取返回值 - 而且因为我希望在进程完成时触发回调(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)
(http://pyuv.readthedocs.io/en/v1.x/process.html)模块的内容,但是我似乎无法找到任何文档或示例来使程序以函数为目标而不是一个文件。当我的进程完成并返回pyuv.Process
时,使用管道来触发回调会感觉不对,如果我能让ret_val
工作并使用它{{1回调。
有什么想法吗?这似乎有可能吗?
答案 0 :(得分:1)
pyuv作者:-)这是不可能的,libuv的uv_spawn
函数本身会创建一个新进程。但是,您可以将处理函数放在不同的python文件中,然后生成它,例如。