上药三品,神与气精

曾因酒醉鞭名马 生怕情多累美人


  • 首页

  • 关于

  • 分类

  • 标签

  • 归档

  • 搜索

python 异步io的未来

发表于 2018-08-28 | 阅读次数:
字数统计: 603 | 阅读时长 ≈ 2

说起python 很多人 觉得因为GIL的存在,效率不高。删除GIL 这个主题 偶尔出现在python-dev的电子邮件列表,并且开发人员已经多次提过,可悲的是没有人设法提供一个合理和简单的解决方案,让我们摆脱这种限制。

Python的异步I/O支持是相当的好。有一堆库可以做这个工作(Twisted, Tornado, Gevent, Eventlet,这里仅列举几个)。每个库都支持很多协议。你可以使用MySQL, Mongo, PostgreSQL, Redis, Memcache, ElasticSearch…,几乎每个DB,和许多其他得服务。一些奇异的协议,像SSH或者Beanstalk只在几个库中支持。不过这些都不是问题,写另一个协议或从一个I/O框架移植到另一个也不是很难。

当然,每一个I/O库都支持客户端和服务端HTTP。想必,这就是为什么HTTP是最常见的用于微服务之间通信的协议。不过大多数框架也支持各种其他协议(msgpack-rpc, thrift, zeromq, ice,这里仅列举几个)。

当聪明的黑客们创建了像 zeromq 、 nanomsg 和发布-订阅总线( publish-subscribe buses )这样优秀的项目的时候,实干的工程师们却仍然使用旧的技术干活。

到目前为止我还没有看到使用 zeromq 作为数据库存取通讯方式的数据库。嗯,现在是有很少一些使用了 zeromq 的开源服务。基本上所有现代的数据库在通讯方式的实现上目前分成了以下两个阵营:

  • 创建并使用自身协议

  • 使用 HTTP 协议

在这个方面数据库算是个比较突出的例子。另外的例子比如 Docker , Docker 使用了基于 unix sockets 的 HTTP 协议作为其通讯协议,然而,当她需要使用全双工流( full-duplex streams )来替代请求-回应( request-reply )模式的时候,就只能很不优雅地打破了其使用的协议的语义( protocol semantics )。

异步核心其实非常简单,首先,网络服务都是同步的,没有什么异步。异步其实就是把一个回复分成两个回,这样可以不会被阻塞。

就像调度一样,当执行I/O指令时,马上切换到其他线程,等I/O设备回复后,再切换回来

vue2.0-start05

发表于 2018-08-21 | 阅读次数:
字数统计: 0 | 阅读时长 ≈ 1

vue2.0-start04

发表于 2018-08-21 | 阅读次数:
字数统计: 0 | 阅读时长 ≈ 1

vue2.0-start03

发表于 2018-08-21 | 阅读次数:
字数统计: 0 | 阅读时长 ≈ 1

vue2.0-start02

发表于 2018-08-21 | 阅读次数:
字数统计: 749 | 阅读时长 ≈ 3

列表渲染 v-for

事件处理器(指令,绑定事件) v-on

事件修饰符

.stop(冒泡)
.prevent(默认事件)
.capture(捕获)
.self
.once(执行一次)

条件渲染 v-show

动态绑定 v-bind:class**


除了内置的指令外 还可以自己设置指令

注册全局指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<body>
<div class="app">
<div v-color="colorStatus">我是一个普通的div元素</div>
</div>
<script src="./node_modules/vue/dist/vue.js" charset="utf-8"></script>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded',function () {
Vue.directive('color',function (el,binding) {//指令名称注意不要加**v-**
console.log(el);//当前绑定自定义指令的元素,可以用来直接操作DOM
console.log(binding);//一些参数,常用的 => binding.value(指令的值)
el.style.backgroundColor = 'lawngreen';
})
var vm = new Vue({
el: '.app',
data: {
colorStatus: true
}
});
},false);
</script>
</body>

当前组件下可用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<body>
<div class="app">
<div v-color="colorStatus">我是一个普通的div元素</div>
</div>
<script src="./node_modules/vue/dist/vue.js" charset="utf-8"></script>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded',function () {
var vm = new Vue({
el: '.app',
data: {
colorStatus: true
},
directives:{
'color':function (el,binding) {
el.style.backgroundColor = 'lawngreen';
}
}
});
},false);
</script>
</body>

计算数据(属性)

为什么需要计算属性

模版式未来描述视图的结构,在模版中放入太多逻辑,导致模版过重难以维护

在计算一个计算属性的时候,更新依赖列表并且缓存结果,只有当其中一个依赖发生了变化,缓存的结果才无效

组件化开发

组件其实是页面组成的一部分

使用组件的好处: 提升效率 方便重复使用 简化调试步骤 提升整个项目的可维护性 便于协同开发

组件的特性:

高内聚性、低耦合性

全局注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<body>
<div class="app">
<my-component></my-component>
</div>
<script src="vue.js"></script>
<script>
//全局注册
Vue.component('myComponent',{//html中是横杠的,在js中就是驼峰
template: `<h2>我是全局组件</h2>`
})
var vm = new Vue({
el: '.app'
});
</script>
</body>

局部注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

<body>
<div class="app">
<my-component></my-component>
<common></common>
</div>
<script src="vue.js"></script>
<script>
var Child = {
template:`<h3>我是局部组件</h3>`
};
var common = {
template: `<p>第二个局部组件</p>`
}
var vm = new Vue({
el: '.app',
components: {
// <my-component> 将只在父模板可用
myComponent: Child,
common //如果组件定义的名字和在html显示的标签名一致就可以省略
}
});
</script>
</body>
1…798081…109
John Cheung

John Cheung

improve your python skills

543 日志
33 分类
45 标签
RSS
GitHub Email
© 2020 John Cheung
本站访客数:
|
主题 — NexT.Pisces v5.1.4
博客全站共226.3k字