我想在每次执行flask路径时执行异步函数.目前我的abar函数从未执行过.你能告诉我为什么吗?非常感谢你:
import asyncio
from flask import Flask
async def abar(a):
print(a)
loop = asyncio.get_event_loop()
app = Flask(__name__)
@app.route("/")
def notify():
asyncio.ensure_future(abar("abar"), loop=loop)
return "OK"
if __name__ == "__main__":
app.run(debug=False, use_reloader=False)
loop.run_forever()
Run Code Online (Sandbox Code Playgroud)
我也尝试将一个阻塞调用放在一个单独的线程中.但它仍然没有称之为abar功能.
import asyncio
from threading import Thread
from flask import Flask
async def abar(a):
print(a)
app = Flask(__name__)
def start_worker(loop):
asyncio.set_event_loop(loop)
try:
loop.run_forever()
finally:
loop.close()
worker_loop = asyncio.new_event_loop()
worker = Thread(target=start_worker, args=(worker_loop,))
@app.route("/")
def notify():
asyncio.ensure_future(abar("abar"), loop=worker_loop)
return "OK"
if __name__ == "__main__":
worker.start()
app.run(debug=False, use_reloader=False)
Run Code Online (Sandbox Code Playgroud) 我正在Chrome版本42.0.2311.152m下进行测试,我想实现在通知中打开一个窗口,如下例所示:(来源:https://developer.mozilla.org/en-US/docs/Web/API/WindowClient )
self.addEventListener('notificationclick', function(event) {
console.log('On notification click: ', event.notification.tag);
event.notification.close();
// This looks to see if the current is already open and
// focuses if it is
event.waitUntil(clients.matchAll({
type: "window"
}).then(function(clientList) {
for (var i = 0; i < clientList.length; i++) {
var client = clientList[i];
if (client.url == '/' && 'focus' in client)
return client.focus();
}
if (clients.openWindow)
return clients.openWindow('/');
}));
});
Run Code Online (Sandbox Code Playgroud)
我的文件结构如下:
https
: //myurl.no-ip.org/app/index.html https://myurl.no-ip.org/app/manifest.json
https://myurl.no-ip.org /app/service-worker.js
我有一个问题,我总是得到一个
InvalidAccessError
当在service-worker.js中调用clients.openWindow('/')或clients.openWindow(' https://myurl.no-ip.org/app/index.html ')时,我收到错误:
{code: …Run Code Online (Sandbox Code Playgroud) 我有一个问题,在注册serviceWorker后,navigator.serviceWorker.controller始终为null.我从不做强制刷新,只刷新页面.我用谷歌浏览器42.0.2311.152米(32位)测试它.
var currentServiceWorker = null;
navigator.serviceWorker.register(SERVICE_WORKER_URL).then(function(serviceWorkerRegistration {
if (navigator.serviceWorker.controller) {
currentServiceWorker = navigator.serviceWorker.controller;
} else {
currentServiceWorker = serviceWorkerRegistration.active;
}
});
Run Code Online (Sandbox Code Playgroud)
根据这个:
ServiceWorkerContainer接口的控制器只读属性在其状态被激活时返回ServiceWorker对象(ServiceWorkerRegistration.active返回的同一对象).如果请求是强制刷新(Shift +刷新)或者没有活动工作程序,则此属性返回null.(来源:https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/controller)
navigator.serviceWorker.controller应该返回相同的对象serviceWorkerRegistration.active.但是,.active我得到了积极的工作者,.controller没有.
你对这种情况有什么想法吗?
谢谢你,安迪
我想从java中的"AbstractBase_step"类扩展.所以我想要一个像这样的钩子:
public abstract class AbstractBase_Steps {
protected Scenario scenario;
@Before
public void background(Scenario scenario) {
this.scenario = scenario;
}
}
Run Code Online (Sandbox Code Playgroud)
为每个步骤文件调用:
public abstract class Hello_Steps extends AbstractBase_Steps {
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到了
cucumber.runtime.CucumberException:不允许扩展定义步骤定义或挂钩的类.类Hello_Steps扩展了类AbstractBase_Steps
有人有诀窍吗?
编辑:为了重用相同的步骤定义,我创建了一个新的类Common_Steps并将其包含在粘合路径中.因此,它的定义可用于测试中的所有要素文件.
我尝试在WebApp和相应的ServiceWorker之间postMessage.serviceWoker已成功注册并正常工作.
不幸的是我发现了一些奇怪的行为:
1.navigator.serviceWorker.controller始终为null.
2.在serviceWorker端,我以这种方式实现了postMessage:
self.addEventListener('message', function (evt) {
console.log('postMessage received', evt);
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,发回原始evt.origin =""和evt.source = null的重要字段不包含所需的值.但我总是收到发送的evt.data.
你知道怎么回帖吗?
非常感谢你!
和我
我想验证node.js应用程序中的一些HTML文档.我已经找到了一些像w3cjs和w3c-validate这样的node.js模块,但似乎它们只是在线工作.因为我必须检查许多小的HTML文档,所以我正在寻找一种离线工作的解决方案,没有互联网.
您知道如何在节点应用程序中集成W3C标记验证器吗?或者检查HTML语法的其他方法是什么?也许像DOM解析器?
cucumber ×1
event-loop ×1
extend ×1
flask ×1
hook ×1
html ×1
java ×1
message ×1
node.js ×1
postmessage ×1
python-3.x ×1
validation ×1