我在Bottle.py中定义了以下静态路由
@get('/create/new/image', apply=[auth_request])
def request_new_image():
file = invoke_image_creation()
return static_file(file, root='pics',
mimetype='image/jpg')
在方法invoke_image_creation()
中,使用简单的事件锁(threading.Event
)让应用程序阻塞,直到创建映像。然后它应该返回静态文件。
对于小图像,这适用于较大的图像(1280x720,大约50 KB),它返回:
封锁仅持续片刻,非常不到一秒钟,只是为了确保它在那里。
可能导致什么?使用simple routing static files function可以很好地使用完全相同的图片。唯一的区别是,文件预先存在,并在HTTP GET请求中定义。
答案 0 :(得分:1)
文件打开和文件数据刷新到磁盘之间存在延迟,因此如果您正在查看文件创建事件,则可以轻松返回基本上仍为空文件的内容。
您需要更改通知以侦听更改而不是新文件,或确保新文件已完全形成。
要执行后者,请更改外部流程以在其他位置创建文件,然后在创建图像时将文件移动到您正在观看的位置。如果两个位置在同一个分区上,则移动将是原子的;如果您的文件监控看到该文件出现,则保证它在那时非空。
或者,伪python代码,在你的单独过程中:
import shutil
createImage(locA, filename)
shutil.move(os.path.join(locA, filename), locB)
并观看locB
。