Python 实用编程技巧(多进程篇)

一、为什么选择多进程编程

我们在多线程篇说过 Python 有一个 GIL 锁,这导致我们无法发挥多核CPU 的性能,于是对于一些耗CPU 的操作(比如:计算、图像处理),我们使用多线程编程显得就不那么好,于是我们采用多进程编程,这样就能充分利用CPU 并发来提高运行的效率(多I/O操作的尽量使用多线程编程,这样不会影响性能)

Mehr lesen

Python 实用编程技巧(多线程篇)

一、GIL(global_interpreter_lock)

1.概念:

Python 一开始为了简单,在多线程编程的时候会在我们的解释器上加一个非常大的锁,也就是允许我们一次只有一个线程运行在一个CPU上,gil 就能实现在同一时刻只有一个线程在CPU上执行字节码(目的当然是保证线程安全),当然他的性能也是非常让人诟病,因为他也无法将多个线程映射到多个CPU上(体现不出多核CPU的优势)

Mehr lesen

Python 实用编程技巧(文件篇)

一、如何读写文本文件

这个问题看似简单,但是由于py2 和 py3 的巨大差异导致我们依然要深入研究一下。

那么 python2 和 python3 的什么区别导致了这种差异的发生呢?

Mehr lesen

C语言编程进阶教程(详细)

0X00 前言

全文已经备份在我的github上,地址:https://github.com/K0rz3n/C-Advanced-programming/blob/master/C-Advanced.md

C 语言作为所有语言的基础地位是可想而知的,但是可能对于我 平时写的比较少,当初学的也不是很深入,但是很多看似平常的编程中其实涉及到很多理论性的东西,需要我们站在编译器的角度看问题,我越到后面发现这一块知识的空缺的危害,于是趁着还有时间,赶紧回炉重造一下,简单的记录一下,作为备忘。

0X01 数组做函数参数的退化问题

Mehr lesen

Python 实用编程技巧(字符串篇)

1.如何拆分含有多种分隔符的字符串

(1)我们首先考虑单一分隔符的情况:

s = “10800 1 10800 10800 ? 197609 14:12:16 /usr/bin/mintty”

我们使用字符串的 split()方法

Mehr lesen

Python 实用编程技巧(迭代篇)

1.如何实现可迭代对象和迭代器对象

如果想从网络上抓取数据存入字典,然后再对字典进行迭代显示,由于网络I/O操作的时间相对较长,这样就会造成用户的长时间等待,我们希望能一次抓取就显示一次,于是迭代器对象出现了。

Mehr lesen

Python 实用编程技巧(序列篇)

前言

Python 作为我们平时使用频率最高的脚本语言拥有着灵活、简洁、高效的特点,但是实际上大多数情况下我们都没有能够发挥其最大的能力,于是分几个部分总结一下编程的技巧,同时也期望对Python 有一个更深的认识。

1.如何在列表,字典,集合中筛选出指定条件的项

最简单的方式就是循环

Mehr lesen

Git 基本操作

前言

我之前也没怎么用过github联合多人写项目,对git的操作也是一知半解,但是总是逃不掉的,最近为了填我4个多月前立下的flag,我不得不学习一下git 的操作,并完成项目的 PR,下面就是我的一些记录。

git 基本概念

git 本地有三个重要的区域,我们平时都是在这四个区域中进行操作的

Mehr lesen

Linux 反弹shell(二)反弹shell的本质

0X00 前言

在上一篇文章 Linux反弹shell(一)文件描述符与重定向,我们已经讨论过了反弹shell中最核心也是相对较难理解的部分,那么接下来我们就可以正式借反弹shell的实例分析回顾前一篇文章讲的知识,并且也加深对反弹shell的理解吧。

0X01 什么是反弹shell

reverse shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

Mehr lesen

Linux反弹shell(一)文件描述符与重定向

0X00 前言

由于在反弹shell的过程中有一些非常精简的语句,但是一直没有深入理解,只是作为一个伸手党/搬运工,于是下定决心要将其弄明白,而这里面最难的也就是文件描述符和重定向的部分,因此我特地写一篇文章单独解释这个问题。

Mehr lesen