Python django如何真正处理开发服务器上的多个请求?
我正在制作一个小django应用程序,为我的react前端提供翻译服务。其工作方式如下:Python django如何真正处理开发服务器上的多个请求?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在制作一个小django应用程序,为我的react前端提供翻译服务。其工作方式如下: 前端尝试使用键查找翻译 如果找不到该密钥的翻译,它将向后端发送一个包含缺少的密钥的请求 在后端,缺少的密钥被附加到json文件中 当一次发送一个请求(当一个请求完成时,另一个请求被发送)时,一切正常。但是当同时发送多个请求时,一切都会中断。json文件已损坏。就像所有的请求都在同时更改文件一样,这导致了这种情况的发生。我不确定是否是这种情况,因为我认为文件不能由两个进程同时编辑(如果我错了,请纠正我),但我
time.sleep(1)
添加到我的api视图的顶部。当我这么做的时候,一切都如期进行
发生了什么事
以下是代码,以防万一:
@api_view(['POST'])
def save_missing_translation_keys(request, lng, ns):
time.sleep(1)
missing_trans_path = MISSING_TRANS_DIR / f'{lng}.json'
# Read lng file and get current missing keys for given ns
try:
with open(missing_trans_path, 'r', encoding='utf-8') as missing_trans_file:
if is_file_empty(missing_trans_path):
missing_keys_dict = {}
else:
missing_keys_dict = json.load(missing_trans_file)
except FileNotFoundError:
missing_keys_dict = {}
except Exception as e:
# Even if file is not empty, we might not be able to parse it for some reason, so we log any errors in log file
with open(MISSING_LOG_FILE, 'a', encoding='utf-8') as logFile:
logFile.write(
f'could not save missing keys {str(list(request.data.keys()))}\nnamespace {lng}/{ns} file can not be parsed because\n{str(e)}\n\n\n')
raise e
# Add new missing keys to the list above.
ns_missing_keys = missing_keys_dict.get(ns, [])
for missing_key in request.data.keys():
if missing_key and isinstance(missing_key, str):
ns_missing_keys.append(missing_key)
else:
raise ValueError('Missing key not allowed')
missing_keys_dict.update({ns: list(set(ns_missing_keys))})
# Write new missing keys to the file
with open(missing_trans_path, 'w', encoding='utf-8') as missing_trans_file:
json.dump(missing_keys_dict, missing_trans_file, ensure_ascii=False)
return Response()
您必须确保没有两个线程或进程同时写入同一个文件。这不是Django的问题,规则通常适用。您可以使用锁(对于具有多个进程的生产设置,可以使用锁文件),或者使用更安全的线程,例如带有传输的数据库。此应用程序不适用于生产。我这样做是为了帮助我的前端国际化,因为我看到的其他解决方案对我来说很昂贵。实际上,我只是尝试使用数据库而不是文件,效果很好。但我真的很想知道为什么它不能处理文件。你能告诉我更多关于锁定和线程安全的应用程序(链接)吗?你应该自学如何编写线程安全的应用程序。这个话题太广泛了,这里无法解释。我会调查的