为什么在Tinkoff Magazine中选择Django

我们在“ Python Junior Podcast”(面向希望更好地了解Python的人的播客)中尝试以各种方式为学习的愿望做出贡献。 我们邀请专家,提出棘手的问题,获取有关初学者Python开发人员,非初学者或非Python学习者的知识和方法的提示-一切皆有可能。

今天,我们引起您的注意,是与Tinkoff杂志的开发者Arseny Gabdullin进行对话的文本版本,主题是他关于莫斯科Python Conf ++的未来报告,但没有破坏。

尽管我总是说人们去参加会议而不是学习,但是这样做对他们有很多好处。 就像在我们的播客中一样。



涉及的对话:

  • Grigory Petrov,MoscowPython的布道者,莫斯科Python Conf ++程序委员会负责人;
  • 《 Tinkoff》杂志的开发者Arseny Gabdullin,MoscowPython Conf ++的发言人;
  • Zlata Obukhovskaya,Nvidia团队负责人,莫斯科Python传播者,莫斯科Python Conf ++程序委员会成员;
  • MoscowPython的联合组织者和联合创始人Valentin Dombrovsky,

瓦伦丁·唐布罗夫斯基(Valentin Dombrovsky): Arseny,您的报告没有受到破坏-您将在会议上告诉我们什么?

Arseny如何成为TJ的开发人员


Arseny Gabdullin:实际上,我们将与我们的开发负责人Vadim Goncharov合作。 它来自业务方面,而我来自开发方面。 我们将讨论如何使用Python进行媒体项目,这将给企业和媒体带来什么好处,我们如何从WordPress迁移到Django,我们现在正在做什么,遇到的问题和成功以及我们对未来的计划。

Valentin Dombrovsky:让我们退后一步。 告诉我您的工作,您是如何最终成为像Tinkoff这样的出色组织的呢? 是什么把你带到那里的? 您的职业道路?

Arseny Gabdullin:我在圣彼得堡以社会学家的身份生活和学习。 我有一个奇怪的专业“信息社会学家”-似乎是一名研究员,但在某种程度上与社会研究的发展和信息系统有关。 有一段时间,我在制作数据库和信息系统以支持案例研究。 在社会学中,经常使用Python。 同时,我在WordPress上创建了各种网站-事情发生了。

与WordPress相关的集体问世


格里高利·彼得罗夫(Grigory Petrov):没有什么可耻的。 一切都在生活中发生。

Zlata Obukhovskaya:是的,一切都发生了。

Valentin Dombrovsky:好吧,现在他们会再次说我们正在毒害PHP专家。

Zlata Obukhovskaya: Grisha,您是否创建了WordPress网站?

格里高利·彼得罗夫:当然!

Zlata Obukhovskaya:我在WordPress上制作了网站。

Valentin Dombrowski:我做了WordPress网站。 我什至没有使用Python进行开发,但是我使用WordPress做网站。

Arseny Gabdullin:是的,我还年轻,我需要钱。 然后在某个时候,我被召集到了进行TJ的外包团队中。 那时我们没有开发人员,一切都是遥不可及的。 我从一些小任务开始,然后变得越来越多。 最后,他们告诉我-您想加入这个团队吗?去国家,去莫斯科吗? 我以为将彼得堡换成了《丁科夫杂志》。

Valentin Dombrowski:然后是WordPress?

Arseny Gabdullin:是的。

Valentin Dombrovsky:也就是说,您向Python的迁移直接发生在工作过程中吗?

Arseny Gabdullin:我以前用Python编写过,但基本上,它们是科学的社会学系统,其开发是在WordPress上进行的。

在2016年,T — F只是一个WordPress主题。 我们只有几篇文章,这是一个完美的解决方案。 到目前为止,WordPress已经足够吸引眼球了。 然后,在2016年底,我建议尝试使用Django,因为已经积累了许多需要解决的问题。

在最近的Moscow Python Conf ++上尝试一下扬声器


格里高里·彼得罗夫(Grigory Petrov):顺便说一句,这不是惯例,您必须先召开会议,然后两个月后再收集演讲者的反馈意见。 诺亚无能为力。 在这次会议上,我们第一次进行实验- 我们正在从头开始准备演讲者 。 我们不仅邀请了瓦森(Vadim)和Arseny, 首先,他们是第一次参加此实验。 这是我系统存在时的第一次,当我们同时将其用于两个发言人的故事时。

您知道两位演讲者的故事通常是什么样的吗? 这是非常可悲的:一个人诉说,诉说,诉说,第二个脸上带着悲伤的表情站在背后的第一个。 然后他们几乎不改变地方。

我们一切都会错。 Arseny和Vadim将无缝地将故事从一个故事传递到另一个故事。 现在一切准备就绪,我们三个已经运行了性能。 很好玩
Arseny,分享您对我们工作室的第一印象。 我认为它们现在特别有价值,因为您和Vadim尚未演出。 您正在旅途中,但报告已准备就绪。 您觉得这个工作坊怎么样? 这是多么疯狂,复杂和不寻常-与您以前的经历如何相符?

Arseny Gabdullin:我们非常喜欢与Vadim进行准备。 每次关闭笔记本电脑时,我们都会想到:“太酷了!” 这是一个非常酷的方法,它很少,但很常规。 每次您意识到自己已经取得了一些进步,但总的来说,已经走了很长一段路。

一个有趣的系统是演讲的核心,看似简单,但是与此同时,您会立即了解所有内容之间的联系以及将来的工作方式。 当然,我从来没有和一个人一起在舞台上表演过。 尝试很有趣-我不知道会发生什么。 希望一切顺利。

格里高利·彼得罗夫(Grigory Petrov):事实证明,系统不会失败。 很高兴听到这一消息。 除了Arseny和Vadim,我们还有11份报告正在准备中。 会议结束前两个月的大部分时间。 那就是说我是一个偏执的再保险公司-会议开始前一个月,报告准备就绪。

Valentin Dombrovsky:会议之间只有半年的时间, 最近一次莫斯科Python Conf ++大会是在10月。

格里高利·彼得罗夫(Grigory Petrov):今天,我们与观众进行了一场闲聊。
Python Junior播客适合初学者开发,尽管我会告诉您一个秘密,不仅大三学生都在听我们讲话。

Arseny Gabdullin:据传闻,Guido Van Rossum有时会看。

Valentin Dombrowski:英文字幕包括-很好!

Django是否适合作为2019年的在线媒体框架


Grigory Petrov: Arseny,根据您的经验告诉我-对于初学者来说-您对Django的满意程度。 实际上,原则上,Django最初被定位为出版业务(即杂志)的框架。 但这是很久以前的事了。 自那时以来,网络发生了很大变化,您最近开始将Django用于Tinkoff Magazine。 告诉我,你失望了吗? Django对于2016年及以后的发布系统喜欢什么? 您的个人意见是什么?

瓦伦丁·多姆布罗夫斯基(Valentin Dombrovsky):同时,没有剧透! 好吧,如果只有一点。

Arseny Gabdullin:去年我们从事DevOps的工作,我们有一支很棒的工程师团队,这些工程师直接使我们成为了超级基础设施。 他们通常对Python特别是Django持怀疑态度。 我们有一个不断的乒乓球。

Zlata Obukhovskaya:他们不必自己做杂志。

Arseny Gabdullin:好的,顺便说一句。 他们习惯于做企业服务,现在他们正在Node.js上做所有事情。 它们只是用来将所有内容提升到Node.js,但我确信许多人都可以在Python和Django上都做得很好。 但是,我要强调的是,关于阻止请求有很多想法-毕竟,这是Django同步特性,不能再重做 。 这是亮点。

在使用ORM方面,我认为这是针对大型项目的,其中存在很多关系,一切都在变化,并且您需要一个框架来布局数据域,Django非常方便。 现在,我们正在继续使用Django作为API,这是旨在用于Django(即分发数据)。

内容项目在Django REST框架上可以存活多长时间?


Zlata Obukhovskaya:您使用DRF,需要谈论它。

Arseniy Gabdullin:是的, DRF是事实上的标准 。 在DRF之上有一个Django模型-幸福(一定程度上)。

Zlata Obukhovskaya:到什么时候?

Arseny Gabdullin:直到复杂的嵌套关系开始的那一刻。 在我们的期刊中,出版系统很复杂,但很线性。 我们在Django上为银行提供了另一项服务-Tinkoff帮助,该服务从杂志开始就发展了。 那里的一切都更加复杂,因为设计人员和产品提出了非常复杂的产品和部分层次结构。 在某个时候,我们想到了一个事实,即它很难在REST中实现,难以序列化,并且难以确保性能。 可以,但是您需要花费大量时间并提出非显而易见的动作来进行优化。

Zlata Obukhovskaya:也就是说,三步连接开始时-好的,不是三步连接,而是更深层次的连接,可能已经很困难。

Arseny Gabdullin:好的。

Zlata Obukhovskaya:事实证明,Tinkoff项目“帮助”将更好地重写为另一种技术。 有什么想法可以用吗? 从您个人的角度来看?

Valentin Dombrovsky:向我们介绍一下,什么是Tinkoff帮助?

Arseniy Gabdullin:这是一项纯粹的银行服务-有关银行产品的信息。 但是很长一段时间他住在一本杂志里。 这有点荒谬,因为他与这本杂志关系不大。 但是我们已经有了一个可以正常工作的发布平台,建立了生产流程,并且当时做一个单独的服务既不合适又不合时宜。

Valentin Dombrovsky:实际上,在Tinkoff中,他们大致结合了一个内容项目:杂志和帮助均在同一平台上制作。

Arseny Gabdullin:这是一个实验。 我们就像在杂志中的一小部分一样做“帮助”,然后它逐渐发展壮大,很明显,他已经生活在杂志中。 然后,我们将其带到单独的服务。

Valentin Dombrovsky:并使用一个新的技术平台?

如果不是Django,那又怎样


Zlata Obukhovskaya:我有一个问题:如果不是Django,那又如何? 有哪些选择?

Arseny Gabdullin:我们都喜欢Node.js,我们被劝说去做Node.js。 我们拒绝了,不希望在Node.js中使用数据。 是的,当然还有性能,异步性等等。 但是,让我们仍然在模型中布置数据。

Zlata Obukhovskaya:那么异步Python出现了吗?

Arseny Gabdullin:是的,如果您想用Python编写,我认为这直接是一种拯救。

瓦伦丁·多姆布罗夫斯基(Valentin Dombrowski):接下来的问题是-Node.js与Python-谁将击败谁。 如果我们谈论人们的习惯,这是一回事,但仍然存在用例中,什么地方最有效? 是Grisha,Node.js还是异步Python?

格里高利·彼得罗夫:是你...

Zlata Obukhovskaya:他们实际上打开了Pandora的盒子!

关于Python同步和异步开发的背景


Grigory Petrov:我已经说过几次了,并且会说,因为这些是非常适合从PythonJunior播客进行广播的基本原理-您好,琼斯和其他所有人!

一般来说,异步编程(Python 3.7和Node.js 11中的事件循环)非常相似。

但是有历史层面。 Node.js来自JavaScript,而JavaScript来自浏览器。 原则上,浏览器无法承受JS中的阻止操作,因为否则页面将被阻止,因此不会滚动。

我们不允许JavaScript阻止浏览器显示的页面滚动。 因此,JavaScript最初是用于回调的。 我们无法立即在那里做一些事情,例如,打开一些本地存储或数据库。 我们可以开始该操作,指定一个回调,然后过一会儿,当浏览器执行该操作时,将调用该回调。 一直都是这样。

当他们提出Node.js时,这种一切都是异步的范式是将回调无缝地转换为Node.js,并且在有一个线程且那时有很多很多低层事物的情况下,在异步范式中表现出色会不时回调此线程报告。

多年后,异步并等待JavaScript的出现(就像Python中一样),难题就发生了。 现在,Node.js应用程序看起来像一个异步协程,并且在await,await,await中等待所有可能的操作。

Python出错了。 Python最初不是嵌入式的,而是一种应用程序语言,它构成了许多由用户启动的系统:数字粉碎机,服务器等。当所有这些系统都想打开文件时,这是一种阻塞操作。 从历史上看,由于GIL,Python便于通过线程进行繁殖和繁殖。

如果我们使用Python希望并行执行某项操作,则需要一个线程池并乘以线程-就是幸福! 然后是事件循环。

Python放弃了线程范式以支持事件循环是什么?


他们为什么开始放弃对EventLoop的流程范例?

对于开发人员而言,将所有阻塞机制隐藏在幕后并在一个线程中仅管理异步操作的结果要容易得多。

这确实很方便-比启动一千个线程并同时等待它们要方便得多。 另外,流本身不是免费的,因此要启动它们并在操作系统之间进行切换是一个负担。

当Python从线程移到事件循环时,事实证明所有现有库都在阻塞。 在Node.js和JavaScript中,所有现有库最初都是非阻塞的,而在Python中,它们最初是阻塞的。 因此,开箱即用的出色异步实质上提供了我们可以等待的两个原语:网络操作和计时器。

使用文件,数据库,管道,数字破碎机,NumPy,图像大小调整-所有这些都在旧的同步库中进行。 为了使用它们,我们需要自己创建线程池,自己启动它们,创造未来,并通过Event Loop将它们放回流中-通常,这是一件令人遗憾的事情。 诸如asyncpg之类的新的,新鲜的库正以某种方式尝试将其包装起来。

异步Python仍然很年轻。

他没有像Node.js这样成功的继承,因此他还没有成熟。 但是,语言本身非常强大。 因此,如果有一个Python开发人员团队,那么即使受限于使用Python进行异步编程的年轻人,经验丰富的Python开发人员也将能够提供一个生产率不低于Node.js的高效解决方案。 但是同时,由于Python比Node.js更了解它,因此解决方案将更好,开发速度更快,代码更简洁,支持更便宜。

从头开始用Python编写异步解决方案是否困难


Zlata Obukhovskaya:实际上,没有人禁止为任何新的流行存储库编写自己的异步驱动程序。

格里高利·彼得罗夫(Grigory Petrov):是的。

Zlata Obukhovskaya:谁不呢?

格里高里·彼得罗夫(Grigory Petrov):任何开发商都低于高级开发商。 异步解决方案确实很难编写。 他们在意想不到的地方失败了。 Arseny,说很难做这些事。

Arseny Gabdullin:异步性? 不寻常

Zlata Obukhovskaya:您在Tinkoff的某处使用异步吗? 也许有些人在晚餐时讲了一个关于使用异步的悲伤或相反的有趣故事?

Arseny Gabdullin:我们的大多数服务都由Node.js提供支持。 在那里,异步嵌入了DNA中。 例如,我们还拥有语音服务,其中许多服务都在Python中运行。 老实说,我不知道它们如何精确地实现所有这些功能,但是我认为异步是通过多线程实现的。 通常,在高负载的API中,它不再是Node.js,至少是一些Scala。 他们在C ++中承担着非常高的工作量,但是再加上多线程处理。

关于完美的编程工具


Grigory Petrov:我想谈一谈。 不幸的是,有一个理想的工具可以解决问题的美丽故事只是童话故事。 多年来,开发人员使用相同的语言和框架来开发许多模式。 这些模式极大地扩展了他作为开发人员的力量,使他可以保持物体聚焦。 多年来,当棋手学习下棋时,多年后,他开始将棋盘看成是熟悉的棋子和熟悉的棋子的组合。

例如,如果某个Python开发人员已经在Python中编程5-10年,那么他可能是一位经验丰富的开发人员,他是T形的,了解Go,Node.js等。 但是由于他在使用Python方面拥有丰富的经验,因此他特别和他的Python团队将编写一个越来越快的服务,该服务比Node.js甚至Go上的开发和维护都更容易。 仅仅因为多年来熟悉的工具为代码编写的各个方面带来了巨大的好处。

当然,有退化的情况-当然。 但是在一般情况下,对于大多数任务来说都是这样。 还是不行 跟我争论。

Zlata Obukhovskaya:当然可以这样说,因为如果开发人员在字母T 长着一条腿,那么没有什么可以阻止他编写的代码过于沉迷于该语言的特定功能,以后没人会理解。 但是他明白-他很棒!

Grigory Petrov: 相反,他们说经验丰富的开发人员编写简单的代码。

Zlata Obukhovskaya:下次我们将把来自不同技术的数名经验丰富的开发人员带到工作室,为您提供武器,并将其放置一个小时。

瓦伦丁·唐布罗夫斯基(Valentin Dombrovsky):我建议让他们每个人阅读对方的代码,看看会发生什么。 这将是一场战斗!

Zlata Obukhovskaya:让我们结束这个哲学论点,回到Django。 我对Arseny的观点非常感兴趣,但如果不是Django,该怎么办? 关于异步高负载的事情,我们有所了解。 对于诸如制作杂志,发布媒体系统之类的任务,Django确实是最好的解决方案。 为什么不烧瓶?

瓦伦丁·唐布罗夫斯基(Valentin Dombrovsky):从您的角度来看,这是最佳选择,还是还有其他选择?

Arseny Gabdullin:我相信Django是媒体的最佳选择。

Valentin Dombrovsky:有哪些选择? 也许还有其他考虑?

Arseny Gabdullin:在银行堆栈上有一个选项可以执行,即使用Tinkoff管理区域中的最佳实践。 PHP框架有一个变体,因为我们拥有PHP-保持相同的范例。 没有其他更具体的选择。 但是,我们希望保持自己的电路,即与银行发展周期无关,因为它仍然具有自己的特征。

Zlata Obukhovskaya:也就是说,如果Python和媒体是Django?

Arseny Gabdullin:我是这样认为的。 ORM解决

Zlata Obukhovskaya:但也有ORM,与Django无关。

Arseny Gabdullin:看来是的。 例如,SQLAlchemy。

Valentin Dombrowski: PonyORM。

Zlata Obukhovskaya:但是,peewee仍在生产中使用。

Arseny Gabdullin:但是,在我看来,Django最初是为这样复杂的项目而开发的,该项目与数据,数据之间的关系相关联,并且可以在我们模型的DNA和构建逻辑中正确读取。

银行发展的特殊性


Grigory Petrov:其余的我们将从报告中学习。 借此机会,我也想问一个与Python无关的问题。

在我们的社会中,有一种趋向使诸如政府,医药,银行等高度受管制的机构浪漫化的趋势:“银行? 钱在那里! 入口处可能有机枪手,四层入口系统,索隆的眼睛安装在车顶上”,等等。 对于您来说,作为以前在银行工作过然后又在银行工作过的开发人员,在银行工作有什么特殊性吗?

顺便说一句,很幸运,您不是在受监管的金融核心上工作,而是在相关基础设施服务上工作。 那么,在核心开发之外,银行的工作是否有任何有趣的细节,或者仅仅是一家普通的IT公司,但是我们不是用社交网络来赚钱,而是用金钱来经营吗?

: , - , IT- .

: vc.ru, , , , . , -, - .., . . .
IT- ?

: . , , . .

Moscow Python Conf ++


: , Moscow Python Conf ++ , , . ? ? ?

: — . , : « , , PostgreSQL 10 ».

— - -, , . , , .

: ? , - , - , ?

: , . , , .

: , Django — !

: Django.

: , , Django — . .

: , .

: , 24 , Python Core Developer, , - . , .

: Moscow Python Conf++.

: Python- 5 . . , , . 来吧!

Source: https://habr.com/ru/post/zh-CN433478/


All Articles