笔记-twisted源码-import reactor解析
笔记-twisted源码-import reactor解析
1. twisted源码解析-1
twisted reactor实现原理:
第一步:
from twisted.internet import reactor
pr_type(reactor)
结果:
<twisted.internet.selectreactor.SelectReactor object at 0x0000001D5D82B748> <class 'twisted.internet.selectreactor.SelectReactor'>
1.1. twisted.internet.reactor.py源码
github中找到相应源码:
from __future__ import division, absolute_import
import sys
del sys.modules['twisted.internet.reactor']
from twisted.internet import default
default.install()
1.1.1. 问题
奇怪的是del语句,在测试时引用又删除会报错
测试代码如下:
import sys
print(sys.modules['test_unit.m1'])
del sys.modules['test_unit.m1']
报错:
KeyError: 'test_unit.m1'
复测发现是因为从del 到import m1有一个执行过程
下面的测试正常:
temp.py
from test_unit import m1
pr_type(m1)
sys.modules['test_unit.m1'] = 5
pr_type(sys.modules['test_unit.m1'])
pr_type(m1)
test_unit.m1.py
import sys
print(sys.modules['test_unit.m1'])
del sys.modules['test_unit.m1']
sys.modules['test_unit.m1'] = 6
运行temp.py结果:
<module 'test_unit.m1' from
'E:\\python\\爬虫\\scrapy\\fangchan_pro\\fangchan_code\\test_unit\\m1.py'>
6
<class 'int'>
5
<class 'int'>
6
<class 'int'>
结果释义:
在m1.py执行完成后才会执行m1 = import()的操作
这时使用locals()可以看到m1变量:'m1': 6
1.2.
twisted.internet.selectreactor.py源码
继续
def install():
"""Configure the twisted mainloop to be run using the
select() reactor.
"""
reactor = SelectReactor()
from twisted.internet.main import installReactor
installReactor(reactor)
1.3.
twisted.internet.main源码
继续:
def installReactor(reactor):
"""
Install reactor C{reactor}.
@param reactor: An object that provides one or more IReactor*
interfaces.
"""
#
this stuff should be common to all reactors.
import twisted.internet
import sys
if 'twisted.internet.reactor' in sys.modules:
raise error.ReactorAlreadyInstalledError("reactor already
installed")
twisted.internet.reactor = reactor
sys.modules['twisted.internet.reactor']
= reactor
简单来说,到这里,做了两件事
- 将系统变量reactor = SelectReactor()
- sys.modules['twisted.internet.reactor'] 设为SelectReactor()
验证如下:
import sys
pr_type(reactor)
pr_type(sys.modules['twisted.internet.reactor'])
结果:
<twisted.internet.selectreactor.SelectReactor
object at 0x000000BD4943B400> <class 'twisted.internet.selectreactor.SelectReactor'>
<twisted.internet.selectreactor.SelectReactor
object at 0x000000BD4943B400> <class
'twisted.internet.selectreactor.SelectReactor'>
1.4.
reactor.run()
reactor已经找到了,下面看一下它在运行后做什么:
res = reactor.run
pr_type(res)
结果:
<bound method _SignalReactorMixin.run of
<twisted.internet.selectreactor.SelectReactor object at
0x000000C61740B6D8>> <class 'method'>
在github中查找得到:twisted/internet/base.py
class _SignalReactorMixin(object):
def
startRunning(self, installSignalHandlers=True):
"""
PosixReactorBase的父类_SignalReactorMixin和ReactorBase都有该函数,但是_SignalReactorMixin在前,安装mro顺序的话,会先调用_SignalReactorMixin中的。
"""
self._installSignalHandlers = installSignalHandlers
ReactorBase.startRunning(self)
def run(self,
installSignalHandlers=True):
self.startRunning(installSignalHandlers=installSignalHandlers)
self.mainLoop()
def mainLoop(self):
while
self._started:
try:
while
self._started:
# Advance simulation time in delayed event
#
processors.
self.runUntilCurrent()
t2 =
self.timeout()
t =
self.running and t2
self.doIteration(t)
except:
log.msg("Unexpected error in main loop.")
log.err()
else:
log.msg('Main loop terminated.')
这里就是主循环了。
笔记-twisted源码-import reactor解析的更多相关文章
- IOS懒人笔记应用源码
这个源码是懒人笔记应用源码,也是一个已经上线的apple应用商店的应用,懒人笔记iOS客户端源码,支持语音识别,即将语音转化成文本文字,所用语音识别类库为讯飞语音类库. 懒人笔记是一款为懒人设计的笔记 ...
- MyBatis 源码分析 - 配置文件解析过程
* 本文速览 由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括.本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于settings,typeAl ...
- InfluxDB源码目录结构解析
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 influxdata主目录结构 [root@localhost ...
- Hadoop学习笔记(9) ——源码初窥
Hadoop学习笔记(9) ——源码初窥 之前我们把Hadoop算是入了门,下载的源码,写了HelloWorld,简要分析了其编程要点,然后也编了个较复杂的示例.接下来其实就有两条路可走了,一条是继续 ...
- [转]OpenTK学习笔记(1)-源码、官网地址
OpenTK源码下载地址:https://github.com/opentk/opentk OpenTK使用Nuget安装命令:OpenTK:Install-Package OpenTK -Versi ...
- Spring源码入门——DefaultBeanNameGenerator解析 转发 https://www.cnblogs.com/jason0529/p/5272265.html
Spring源码入门——DefaultBeanNameGenerator解析 我们知道在spring中每个bean都要有一个id或者name标示每个唯一的bean,在xml中定义一个bean可以指 ...
- 鸿蒙内核源码分析(ELF解析篇) | 你要忘了她姐俩你就不是银 | 百篇博客分析OpenHarmony源码 | v53.02
百篇博客系列篇.本篇为: v53.xx 鸿蒙内核源码分析(ELF解析篇) | 你要忘了她姐俩你就不是银 | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应 ...
- v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口 | 百篇博客分析OpenHarmony源码
子曰:"苟正其身矣,于从政乎何有?不能正其身,如正人何?" <论语>:子路篇 百篇博客系列篇.本篇为: v72.xx 鸿蒙内核源码分析(Shell解析篇) | 应用窥视 ...
- Cognitive Graph for Multi-Hop Reading Comprehension at Scale(ACL2019) 阅读笔记与源码解析
论文地址为:Cognitive Graph for Multi-Hop Reading Comprehension at Scale github地址:CogQA 背景 假设你手边有一个维基百科的搜索 ...
随机推荐
- 微信小程序使用wxParse实现接入富文本编辑
简介 微信小程序中比如活动说明,简介这样的图文介绍说明页面,后台通常配置成富文本编辑框,由后台直接输入内容,然后在小程序界面展现. 但是富文本编辑提取到内容是html格式的,写法与小程序的wxml并不 ...
- C语言中调用运行python程序
C语言中调用运行python程序: Python代码如下: 创建test.py. #!/usr/bin/python3 #test.py import sys x = ]) print x*x 注意: ...
- eclipse 自定义代码块设置(代码模板)
eclipse设置自定义代码模板 window -> show View -> other -> Templates 原来main模板 修改模板 再次插入
- nginx解决WordPress 上传到服务器后页面404错误的方法
人啊,要说你傻了吧,真是啥事都能碰到: 因为换了nginx,把新做的上传到服务器配置好后,就主页和后台能打开,其他的所有页面,全是404,果真404和502是我最讨厌的数字啊,这让我很怀疑人生啊,怀疑 ...
- AngularJS Learning Notes
AngularJS 简介 AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过 指令 扩展了 HTML ...
- [Linux kali] linux kali [KDE]一些软件切换输入法无效
#开始 今天最终是在实体机安装了Kali Kali的默认桌面是GNOME桌面 但是用久了windows桌面用这个实在是不习惯 然后看到了kali有自带KDE版本的 然后就下载了一个尝尝鲜 之前在Deb ...
- RTT学习之PWM、ADC设备
一 使用步骤: 查找 PWM 设备获取设备句柄.rt_device_find() 设置 PWM 周期和脉冲宽度.rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, ...
- 洛谷 P2239 螺旋矩阵(模拟 && 数学)
嗯... 题目链接:https://www.luogu.org/problem/P2239 这道题首先不能暴力建图,没有简单方法,只有进行进行找规律. AC代码: #include<cstdio ...
- 安装多个xcode对homebrew影响
安装多个xcode,可能会导致无法识别默认使用哪个xcode的情况,这时候执行下列语句,设置默认xcode sudo xcode-select --switch /Applications/Xcode ...
- 【STM32H7教程】第57章 STM32H7硬件JPEG编解码基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第57章 STM32H7硬件JPEG编解码基础知识 ...