在异步代码中使用PIL(Twisted Web)

时间:2013-02-07 16:31:20

标签: python asynchronous twisted python-imaging-library

我有一个接收图像的Web API,并将其传递给另一个异步服务。然而,在通过之前,如果我进一步使用PIL缩小它。

我的代码看起来像那样(简化,跳过不相关的细节):

def render_POST(self, request):
    pil_image = Image.open(request.content)
    pil_image.thumbnail((640,640), Image.ANTIALIAS) 
    outfile = StringIO()
    pil_image.save(outfile, "JPEG")
    do_something_async_and_write_result(outfile)
    return NOT_DONE_YET

有没有一种方法可以让它异步而不会过度设计*它?

* 我会考虑设置一个仅用于过度工程的消息队列服务

1 个答案:

答案 0 :(得分:1)

如果给出了线程安全(关于PIL以及如何使用它),您可以使用deferToThread:
https://twistedmatrix.com/documents/current/api/twisted.internet.threads.html

增强配方,感谢Calderone