gpt4 book ai didi

python - 无法将 InMemoryUploadedFile 写入线程中的本地文件 - Python

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:24 31 4
gpt4 key购买 nike

我的程序是在 Django 中。我从js请求中获取上传的文件。FILES:

my_docs = {}
for doc_title in request.FILES:
doc_name = request.FILES[doc_title].name
doc = request.FILES[doc_title]
my_docs[doc_name] = doc

并将它们传递给具有“save_docs”方法的服务对象:

class MyService():
def __init__(my_docs):
self.my_docs = my_docs
...
def save_docs(self):
for my_doc in self.my_docs:
with open(os.path.join(self.localfile_path,my_doc),'wb+') as destination:
for chunk in self.my_docs[my_doc].chunks():
destination.write(chunk)
#destination.close()

def process(self):
...
self.save_docs()
...
...

创建一个线程然后调用它:

my_service = MyService(my_docs)
platform_thread = threading.Thread(target=my_service.process)
platform_thread.start()

但是有错误:

self._target(*self._args, **self._kwargs)
File "/Users/xxxx/eclipse-workspace/My/my.py", line 97, in process
self.save_docs()
File "/Users/xxxx/eclipse-workspace/My/my.py", line 39, in save_docs
for chunk in self.my_docs[my_doc].chunks():
File "/Users/xxxx/Library/Python/3.7/lib/python/site-packages/django/core/files/uploadedfile.py", line 91, in chunks
self.file.seek(0)
ValueError: I/O operation on closed file.

问题是当我运行程序而不创建线程时,它可以工作。为什么在线程内却没有呢?我必须使用线程,因为我需要同时运行多个不同的此类服务。

最佳答案

实际上,您无法使用传递到目标函数的 InMemoryUploadedFile 对象。您可以保存数据或传递文件内容,但传递文件内容有一点风险,因为您可能会丢失上传的数据。此外,尝试使用像 celery 这样的异步进程而不是线程。

关于python - 无法将 InMemoryUploadedFile 写入线程中的本地文件 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52830187/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com