所以我真的很喜欢文件I/O和内存限制等等,而且我很难让我的Web应用程序成功地将大文件下载到带有烧瓶的Web浏览器中make_response
.以下代码适用于较小的文件(<~1GB),但是MemoryError
当我进入较大的文件时会给我一个异常:
raw_bytes = ""
with open(file_path, 'rb') as r:
for line in r:
raw_bytes = raw_bytes + line
response = make_response(raw_bytes)
response.headers['Content-Type'] = "application/octet-stream"
response.headers['Content-Disposition'] = "inline; filename=" + file_name
return response
Run Code Online (Sandbox Code Playgroud)
我假设将超过2 GB的二进制数据粘贴到一个字符串中可能是一个很大的禁忌,但我不知道替代完成这些文件下载黑色魔法.如果有人可以通过粗略的[?]或缓冲的文件下载方法让我走上正轨,或者只是指向一些中级资源以便更深入地了解这些内容,我将非常感激.谢谢!
我希望我没有违反任何SO规则:当变量嵌套多个级别深度,具有相当长的名称并且被赋予相当长的值/表达式时,为变量赋值的首选样式是什么.
例如:
if this:
if that:
if here:
if there:
big_variable['big_key']['big_value'] = another_big_variable_that_pushes_line_over_79_characters
other_thing = something
Run Code Online (Sandbox Code Playgroud)
字符限制违规只是单个数字,但我想清理我的代码,以便尽可能忠实地遵循PEP 8.我已经完成了以下操作,但我仍然是python的新手,我不确定是否会让经验丰富的python程序员感到畏缩:
if this:
if that:
if here:
if there:
big_variable['big_key']['big_value'] = \
another_big_variable_that_pushes_line_over_79_characters
other_thing = something
Run Code Online (Sandbox Code Playgroud)
我觉得线条延续字符有些禁忌; 但是,如果我正在使用这些大字典而且我不能在变量名称的中间做一个干净的休息,我真的不能想到一个更清洁的解决方案.谢谢您的帮助!
TL;DR 更新:无论是从客户端关闭 EventSource 还是完全关闭客户端,php 都会继续在后端执行,并且无法报告connection_aborted()
. 为什么会这样?
我一直在 Google 和 Stack Overflow 上寻找这个问题的答案,但没有一个建议的修复可以解决这个问题:我有一个简单的页面,使用 JavaScript 和 php 测试服务器发送事件的功能。一切都运行良好,直到我意识到当客户端导航到另一个页面或刷新自身时,服务器脚本执行并没有停止。这似乎是一个常见问题,其他问题中给出的建议对我来说没有效果。
我已经调查过的 StackOverflow 问题
PHP 事件源继续执行(此处对已接受答案的评论几乎导致了某些结果,然后他们退出“在聊天中继续讨论”,并且该链接显然已损坏)
我已经调查过的链接文章和其他材料
我已经删除了我认为可能的罪魁祸首的所有代码,但问题仍然存在。我特别惊讶的是,在客户端中显式调用之后connection_aborted
继续报告,或者在 10 秒服务器循环完成之前简单地关闭客户端。这是我的确切代码,除去服务器发送的事件内容之外的所有内容后:false
EventSource.close()
sse_tests.js
document.addEventListener('DOMContentLoaded', () => {
// Set up EventSource for receiving server-sent events.
const testEventSource = new EventSource('sse_tests.php');
testEventSource.addEventListener('test', (e) => {
const data = JSON.parse(e.data);
console.log(`count: ${data.count}`);
if (data.count >= 5) {
testEventSource.close(); …
Run Code Online (Sandbox Code Playgroud) 是否可以逐步执行搜索和替换的结果,以确保在大胆执行的整个文件搜索和替换中不会对您的代码进行不必要的修改?
Vim抛出状态消息:
"*X* substitutions on *Y* lines"
Run Code Online (Sandbox Code Playgroud)
我很好奇是否有一个键或命令来逐步完成每个替换并快速检查以确保你没有用意外的字符串匹配击中自己的脚.Vim的新手; 对不起,如果这是一个明显或无关紧要的问题!谢谢您的帮助 :)
我在过去的一个月里一直在构建一个Web应用程序,对于我对这一切的新意见,情况出乎意料地顺利进行.也就是说,直到昨天,我在页面上进行了AJAX改造,为用户提供服务器端进程的实时反馈.现在,当我启动应用程序时,我的第一行代码出现错误(到目前为止没有产生任何问题),我检查会话对象以查看操作是否处于活动状态.
我收到错误:
UnboundLocalError: local variable 'session' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
当我尝试代码时:
if 'active_op' not in session:
print 'bizbaz'
Run Code Online (Sandbox Code Playgroud)
如果它之前没有工作,我会认为我对这段代码做错了.我已经将我的代码恢复到AJAX更新之前的状态,我仍然会收到此错误,即使昨天使用相同的代码也是如此.任何关于此的指针都将非常感激.正如我所说的,我对Web应用程序开发和会话仍然有点新意.显然我对会话和烧瓶使用它们的理解有点过时,因为我完全难以理解为什么它突然停止工作.让我知道我能做些什么来澄清我的问题; 我被困住了,直到我弄明白这一点.谢谢!
编辑:我有这个代码试图为会话变量分配一个字典.
session = {'foo':'bar'}
Run Code Online (Sandbox Code Playgroud) 更新:我认为我对 async/await 的问题比链接的建议更微妙,并更新了问题的标题,希望能更好地反映这一点。我特别关心如何开始一些可能需要一段时间的异步工作——但不会影响需要按顺序发生的大部分页面逻辑——然后等待异步工作完成,然后再继续页面逻辑的一个子集,它依赖于异步逻辑。答案基本上是相同的 ( await Promise.all
),但对我的问题的公认答案提供的清晰度比链接的答案更有价值(在使用之前将时序逻辑抽象为自己的异步函数await Promise.all
)。
我很难确定这在 javascript 中是否可行(开头标有“XXX”的注释块是我正在努力使用的代码(假设任务 1-4 必须按顺序执行并且不能并行化) )):
document.addEventListener('DOMContentLoaded', () => {
// Kick off some asynchronous piece of work that potentially takes some
// time (for instance, opening and upgrading an indexedDB) but that should
// not hold up other work that should happen in the meantime (ie: executing
// tasks 1-3).
asynchronousSetup(); // 1000 - 1500 ms of work
// Do a bunch of other stuff that …
Run Code Online (Sandbox Code Playgroud) python ×3
flask ×2
javascript ×2
async-await ×1
download ×1
eventsource ×1
pep ×1
php ×1
promise ×1
session ×1
styling ×1
vim ×1
web ×1