0

我在 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),它会返回:

  • HTTP 200
  • 没有回复内容
  • 内容长度:0
  • MIME 类型:图像/jpg

阻塞只持续片刻,不到一秒钟,只是为了确保它在那里。

是什么原因造成的?使用简单的路由静态文件功能可以很好地处理完全相同的图片。唯一的区别是,该文件是预先存在的,并且它在 HTTP GET 请求中定义。

4

1 回答 1

1

文件打开和文件数据刷新到磁盘之间存在延迟,因此如果您正在监视文件创建事件,您可以轻松返回本质上仍然是空文件的内容。

您需要更改通知以侦听更改而不是新文件,或者确保新文件已完全形成。

要执行后者,请更改外部进程以在其他位置创建文件,然后在创建图像后将文件移动到您正在观看的位置。如果这两个位置在同一个分区上,则移动将是原子的;如果您的文件监控看到该文件出现,则可以保证此时该文件非空。

或者,伪python代码,在您的单独进程中:

import shutil

createImage(locA, filename)
shutil.move(os.path.join(locA, filename), locB)

并观看locB

于 2013-01-15T20:27:38.897 回答