以下代码是给出here答案的变体。
请求两个webbrowser.open()
,并且它们在时间上略有间隔。
两个网页都可以正常呈现,但两者都显示第二个(Chris
)参数。
为什么Pat
没有受到欢迎?
import random, threading, webbrowser
from flask import Flask, render_template_string
app = Flask(__name__)
@app.route('/<name>')
def index(name):
return render_template_string('''<h3>Hello, {{ name }}!</h3>''', name=name)
if __name__ == '__main__':
names = ['Pat', 'Chris']
port = 5000 + random.randint(0, 999)
wait = 1.25
for name in names:
url = "http://127.0.0.1:{0}/{1}".format(port, name)
threading.Timer(wait, lambda: webbrowser.open(url)).start()
wait += 0.5
app.run(port=port, debug=False)
答案 0 :(得分:0)
在循环中定义回调函数是问题,它被称为后期绑定。两个lambdas最终都会看到url
的最后一个值。将lambda替换为:
functools.partial(webbrowser.open, url)
或废弃计时器,并在循环中仅time.sleep(0.5)
。