python
不擅长纵横的捭阖家
行走在荒野的撰写者
展开
-
python中的多线程之间的通信
首先使用多线程的方法进行现场通信:import timefrom multiprocessing import Processfrom queue import Queuedef producer(queue): queue.put("a") time.sleep(2)def consumer(queue): time.sleep(2) data = queue.get() print(data)if __name__ == "__main__": queue = Queue(1原创 2021-07-27 22:29:21 · 525 阅读 · 0 评论 -
线程同步 lock rlock
基本使用方法from threading import Lock, RLock, Conditionlock = Lock()lock.acquire()lock.release()三种有可能出现死锁的情况1、 连续两次获取acquirelock.acquire()lock.acquire()没有release锁lock2、 互相等待的情况A要获取资源a,b;先a后bB要获取资源b,a;先b后aA(a,b)B(b,a)A(a,b)B(a,b)acquir原创 2021-07-18 11:05:53 · 139 阅读 · 0 评论 -
GAN网络做异常检测
"""@Time : 2021/7/6 15:20-------------------------------------------------@Author : sailorlee(lizeyi)@email : chrislistudy@163.com-------------------------------------------------@FileName: train_gan.py@Software: PyCharm"""import matplotlib.原创 2021-07-13 10:24:35 · 1925 阅读 · 4 评论 -
python多线程的GIL
cpython中的 global interpreter lockpython中的一个线程对应c语言中的一个线程。python中的一个线程对应c语言中的一个线程。python会在解释器上加一把非常大的锁。同一时刻一次只有一个线程运行在一个cpu上执行字节码。无法将多个线程映射到多个cpu上执行。gil会根据执行的字节码行数以及时间片释放gil。gil遇到io操作会主动释放。def add(): #1. dosomething1 #2. io操作 # 1. dosomething原创 2021-07-12 16:27:50 · 91 阅读 · 0 评论 -
python中的迭代协议与生产器
迭代协议一共有两个类型,一种是Iterable(可迭代),另一个是迭代器Iterator。两者的类型不同。from collections.abc import Iterable,Iteratora = [1,2]iter_rator = iter(a)print(isinstance(iter_rator,Iterator))原创 2021-07-07 22:58:55 · 61 阅读 · 0 评论 -
解析pcap包
需求:我们需要从恶意流量中的log中提取其ip地址。再根据ip地址去从tcpdump中采集pcap包,把恶意流量提取出来。首先是初版的解析pcap包import osfrom scapy.all import *import scapy.all as scapyimport sysimport csvfrom time import strftime, localtime# f = open('log/dealpcap.log', 'a') #日志的重定向输出# sys.stdout =原创 2021-06-23 11:31:51 · 1594 阅读 · 0 评论 -
列表、生成器、字典推导式
列表生成式列表生成式的性能高于列表操作的性能。def handle_item(item): return item*itemodd_list = [handle_item(i) for i in range(21) if i%2 == 1]#用简介的方式去遍历可迭代对象生成需要格式的列表int_list = [1,2,3,4,5]qu_list = [item * item for item in int_list]print (type(qu_list))int_list = [1,原创 2021-06-02 10:55:11 · 108 阅读 · 1 评论 -
python中的切片对象
list中用法extend与append之间的区别。在extend里面添加元素,添加的内容是可迭代的对象,把对象里面的元素添加进去。但是append就添加里面一个对象,并不会把里面的元素拿出来。a = [1,2]a.append((3,4)) a是 [1,2,(3,4)]a.extend((3,4)) 而这里的a是[1,2,3,4]my_list = []my_list.append(1)my_list.append("a")from collections原创 2021-06-01 16:11:29 · 250 阅读 · 0 评论 -
python上下文管理器
try的用法中return的返回值def exe_try(): try: print ("code started") raise KeyError return 1 except KeyError as e: print ("key error") return 2 else: print ("other error") return 3 finally:原创 2021-05-31 10:31:22 · 72 阅读 · 0 评论 -
python的私有属性和自省机制
私有属性from chapter04.class_method import Dateclass User: def __init__(self, birthday): self.__birthday = birthday def get_age(self): #返回年龄 return 2018 - self.__birthday.yearclass Student(User): def __init__(self, birt原创 2021-05-30 14:19:36 · 58 阅读 · 0 评论 -
类方法、静态方法和实例
class Date: #构造函数 def __init__(self, year, month, day): self.year = year self.month = month self.day = day def tomorrow(self): self.day += 1 def __str__(self): return "{year}/{month}/{day}".forma原创 2021-05-28 09:42:51 · 84 阅读 · 0 评论 -
python的鸭子类型和抽象基类
鸭子类型三个类实现同一个方法,就可以通过for循环去调用每个类的对象class Cat(object): def say(self): print("i am a cat!")class Dog(object): def say(self): print("dog")class Duck(object): def say(self): print("duck")animal_list = [Cat,Dog,Duck]f原创 2021-05-20 23:03:57 · 136 阅读 · 0 评论 -
python中的魔法函数
首先__xxx__,这样形式的函数为魔法函数。如果遍历对象,没有__getitem__方法,那么只能通过命名一个新的对象,从类中获取数据,再进行赋值、迭代。class Company(object): """ 魔法函数是__xxx__ 优先使用迭代器、然后使用getitem这个方法; 迭代器需要实现 __iter__(self),这个方法 """ def __init__(self,employee_list): self.employe原创 2021-05-18 22:19:04 · 70 阅读 · 0 评论 -
python中一切皆对象
在python的世界中,一切皆是对象。函数可以变成对象进行赋值,类也可以。def ask(name = "bobby"): print(name)class Person: def __init__(self): print("bobby1")obj_list = []obj_list.append(ask)obj_list.append(Person)for item in obj_list: print(type(item))函数中,一个函原创 2021-05-14 21:17:32 · 70 阅读 · 0 评论 -
python的自动回收机制
1、python中的is 和 ==在python中,赋值意味着是在贴标签,a = [1,2,3,4],就是将a贴在这个[1,2,3,4]这个对象当中。id(a)就是指a的对象是啥。a = [1,2,3,4]b = [1,2,3,4]#a和b不是同一个对象,因此返回falseprint(a is b)# a和b内容判断是否相等 ,因此返回trueprint(a == b)如果是 a = [1,2,3,4], b=a;那么b在添加[1,2,3,4,5],a也会跟着改动。2、 垃圾回收垃原创 2021-05-13 23:05:15 · 126 阅读 · 0 评论 -
dict和set的背后实现原理
from random import randintdef load_list_data(total_nums, target_nums): """ 从文件中读取数据,以list的方式返回 :param total_nums: 读取的数量 :param target_nums: 需要查询的数据的数量 """ all_data = [] target_data = [] file_name = "G:/慕课网课程/AdvancePython原创 2021-05-13 10:01:37 · 110 阅读 · 0 评论 -
python的set使用方法
set是无序、不重复 的集合,接受一个可迭代的对象s = {'a','b'} #set的初始化方式s.add('c')frozenset 不可变的类型s1 = frozenset("adcbe")向set添加数据another_set = set("cef")re_set = s.difference(another_set) #s - another_set 返回一个新的setre_set2 = s-another_set #re_set 和 re_set2是一样的re_原创 2021-05-12 22:50:03 · 363 阅读 · 0 评论 -
python中常用的for循环
在学习代码的时候,我遇到了这样的python语句。让我这种学习小白很是头疼。all_user = [user for user,sock in part1.items()]于是在不停地尝试之后,得到以下结论:首先我创建了一个字典part1 = {“name1”:“chen”,“name2”:“zong”}当代码:all_user = [user for user in part1....原创 2019-08-22 11:12:00 · 202 阅读 · 0 评论 -
python-dict方法
dict是属于mapping类型的,使用的方法就是直接定义一个花括号 { } 。在下面的代码中,列举了dict的一些常用的方法。这里涉及到浅拷贝和深拷贝的知识,因为python的内部是用c写的,所以原理也是相似。当使用浅拷贝时,新的对象的更改会带动,被拷贝的对象。原因:浅拷贝是将新的一根指针指向原有的内存块,并没有开辟新的内存块,因此会有变化。解决方法就是使用 import copy的方法 copy.deepcopy(xxx对象)"""@Time : 2021/5/11 22:03@Au原创 2021-05-11 23:01:53 · 137 阅读 · 0 评论