Skip to content
Branch: master
Go to file
Clone

Latest commit

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
img
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Python

Build Status

基于mitm中间人的形�获�所有公众�历�文章,评论,阅读�

feature
1,支�水平扩展
2,支�增�更新与自动化抓�阅读�,评论数�
3,支�抓����继续��抓�
4,支��阶段时间频率控制
5,支��续监控指定公众�
代ç ?æš‚ä¸?å¼€æº?,如有问题交æµ?å?¯åœ¨è¯¥ä»“库æ??issue,对应处ç?†æµ?程图如下:

nice_download.py 多线程文件下载器

ç?†è®ºåœ¨å¤§åž‹æ–‡ä»¶ä¸‹è½½ï¼Œå¸¦å®½å……足的情况下,å?¯å¢žåŠ æ•°å??å€?下载速度
原�是多线程对目标文件分�下载
1,å?‘é€?head请求获å?–目标文件总大å°?,以å?Šå½“å‰?是å?¦æ”¯æŒ?分å?—下载(详情:httpå??è®®header头rangeå?Šresponseçš„content-range),现在基本都支æŒ?
2,下载�创建一个和�下载文件一样大�的文件
3,根�1中获得的文件大�分�多线程,�个线程下载��的数��
�型文件�能看�出加速效果,在大型文件上就会拉大差�
关于http的range特性:
有些文件下载器在下载中断之��以在中断�置继续下载,而�必�新开始的原因就是利用了支�range的特性
记录了中断时的文件å??ç§»ä½?ç½®,在实现时å?ªè¦?在中断异常的时候记录文件å??ç§»ä½?置到临时文件
下次继续下载读å?–临时文件中的å??ç§»å?³å?¯æ”¯æŒ?断点下载,下载完æˆ?时删除记录文件å??移的临时文件å?³å?¯
说明:
nice_download.py是多线程模å¼?,所以去除断点下载功能,å?¦åˆ™ç»´æŠ¤ä¸´æ—¶æ–‡ä»¶å??ç§»ä½?置比维护å?•一进程的临时文件å??ç§»ä½?ç½®è¦?å¤?æ?‚的多
查看帮助:python nice_download.py -h

基于tensorflow的验��识别

ä¾?èµ–:
pip install tensorflow
pip install numpy

0x01,cd tensorflow
0x02,模型训练:python train.py
0x03,验�验�:python cnn_test.py

已有大多相关案例,测试相关总结与截图如下:

详相说明相关截图

总结文档:基于机器学习(TensorFlow)的��验��识别.pdf

redpackage.py && red_package_optimize.py 一�红包分��路

red_package_optimize.py为优化版,redpackage.py的range有点浪费内存,比如在红包个数特别大的情况下

指定红包总金�,�指定红包的个数,获得�个红包分�金�详情

例,红包总金�为10元,分�7个
➜  Py git:(master) ✗ py redpackage.py 10 7
[0.57, 2.37, 1.91, 0.32, 1.3, 2.24, 1.29]
第 1 个红包金�:0.57元
第 2 个红包金�:2.37元
第 3 个红包金�:1.91元
第 4 个红包金�:0.32元
第 5 个红包金�:1.3元
第 6 个红包金�:2.24元
第 7 个红包金�:1.29元
验�:红包总金� is 10.0元, 分�� res sum is 10.0元

ac.py 字符串�索算法(tire树+AC自动机)

学习记录:
如果你的本地å?ªæœ‰å‡ ä¸ªï¼Œå‡ å??个è¯?,那么没有必è¦?使用,直接存é…?置文件,字典查找å?³å?¯ï¼Œ
这比�api�起http请求�快的多。但如果�的数目�断增加,那么�期将�利于维护,
需��务化。

这个算法存在于实际场景,判断�个��是�是�感�,就涉�到字符串查找。
æ•?感è¯?被å°?装æˆ?了一个api接å?£,使用起æ?¥ä¹Ÿå¾ˆæ–¹ä¾¿,直接å?‘apiæ??交å?•è¯?,
看返回结果就知�是�命中,命中了则字符串存在,表明查找到了。

需�数�结构与算法知识:
�考文档1(海�数�处�之Tire树(字典树)):
      http://blog.csdn.net/ts173383201/article/details/7858598
�考文档2(AC自动机总结):
      http://blog.csdn.net/mobius_strip/article/details/22549517

trie的核心�想是空间�时间,跟彩虹表的�想一致,但trie树�是彩虹表,
简而言之,trie树利用字符串的公共å‰?ç¼€æ?¥é™?低查询时间的开销以达到æ??高效率的目的。

它有3个基本性质:
      根节点�包�字符,除根节点外�一个节点都�包�一个字符。
      从根节点到�一节点,路径上�过的字符连接起�,为该节点对应的字符串。
      �个节点的所有�节点包�的字符都�相�。

�制了别人画的图,大致就是一�如下的树结构,需�用语言构造这棵树��:

fail 指针的�解图解,以下内容需�仔细读
�考:http://www.cnblogs.com/crazyacking/p/4659501.html

树上的�分别是:
{ he , hers , his , she}
按图所示分�3层。看到第三层,是"she",其中:
①s指�root
②h先找到s的fail指针
å?‘现是0å?·æŒ‡é’ˆï¼Œä¸?是h,然å?Žhå°±ä¸?高兴了,å†?问问sçš„fail指针root:“你有没有儿å­?和我å?Œå??å?«hçš„â€?
root说:“有,你指�他��,然�h就高兴的指�了第一行的h.
③e开始找了,首先问他�爸h:“你的fail指针指���
h说:“图上第一行那个h啊�
ç„¶å?Žeå°±å±?颠å±?颠地跑去问图上第一行那个h:“你有没有å??字和我一样的儿å­?啊â€?
图上第一行那个h说:“有,他地�是xxx�
最�e的fail指针就指�xxx地�,也就是第一行那个e了
�现这样,如果一个字符串查到第三行的e以�的字符��匹�,那说明他��应该有个‘he’
刚好e的失败指针指�的是第一行的‘he...’的那个e;
这样就ä¸?用从h开始å†?找一é??,而是接ç?€ç¬¬ä¸€è¡Œçš„eç»§ç»­å¾€å?Žæ‰¾ï¼Œä»Žè€ŒèŠ‚çœ?了时间.
➜  ~ du -h word.md && wc -l word.md
1.0M  word.md
57193 word.md

本地测试了一下,57000�记录大于�1M硬盘空间,那么6M的空间大约包�记录34W�记录,
我传到github的word.md没有几个字符,��了演示,而且�个��还加了rank等级,\t制表符,实际�用空间应该更�,
生产环境甚至�以直接将这些数�缓存到内存中。

测试�索指定字符串:

查找到了
➜  ~ python ac.py lock
Good ! Find it, the item is:
[(0, 3, 'lock', 1, 2)]

查找到了
➜  ~ python ac.py stop
Good ! Find it, the item is:
[(0, 3, 'stop', 2, 3)]

没有查找到
➜  ~ python ac.py test
Sorry, The item not in file dict

如果查找到了返回一个list,list中item类型为tuple, 并且包�了在树中匹�的起,终点�置index

calc24.py 算24游��程�

游�规则:给定4个数,�以执行的�算有 + - * / , 求出算的结果是24的算法过程

get help:
➜  Py git:(master) ✗ py calc24.py -h
Usage: usage -n 1,2,3,4

Options:
  -h, --help  show this help message and exit
  -n NUMS     specify num list
  
exp:
➜  Py git:(master) ✗ py calc24.py -n 10,8,9,4
[10, 8, 9, 4]
9 - 10 = -1
4 + -1 = 3
8 * 3 = 24
Success

or random test:
➜  Py git:(master) ✗ py calc24.py
[9, 10, 3, 6]
10 - 9 = 1
3 + 1 = 4
6 * 4 = 24
Success

~~~python轮�很强大~~~

rpn.py 逆波兰表达� python 版实现

逆波兰表达�被广泛应用于编译原�中,是一�是由波兰数学家扬·武�谢维奇1920年引入的数学表达�方�,在逆波兰记法中,
所有�作符置于�作数的��,因此也被称为�缀表示法。逆波兰记法�需�括��标识�作符的优先级。
以利用堆栈结构�少计算机内存访问。
➜  Py git:(master) ✗ python rpn.py
['11111111111111', '9999999999999', '*', '99', '12', '4', '/', '-', '10', '+', '+']
True 111111111111098888888888995 111111111111098888888888995
True 326 326

dispatch.py 轮转队列 | å??程实现

你的手头上会有多个任务,�个任务耗时很长,而你��想�步处�,而是希望能�多线程一样交替执行。
yield 没有逻辑�义,仅是作为暂�的标志点。
程���以在此暂�,也�以在此��。而通过实现一个调度器,完�多个任务的并行处�。
通过轮转队列�次唤起任务,并将已�完�的任务清出队列,模拟任务调度的过程。
核心代�:
from collections import deque
class Runner(object):
    def __init__(self, tasks):
        self.tasks = deque(tasks)

    def next(self):
        return self.tasks.pop()

    def run(self):
        while len(self.tasks):
            task = self.next()
            try:
                next(task)
            except StopIteration:
                pass
            else:
                self.tasks.appendleft(task)

def task(name, times):
    for i in range(times):
        yield
        print(name, i)

Runner([
    task('hsfzxjy', 5),
    task('Jack', 4),
    task('Bob', 6)
]).run()

coroutine.py 通过gevent第三方库实现å??程

上é?¢çš„dispatch.py通过yieldæ??供了对å??程的支æŒ?,模拟了任务调度。而下é?¢çš„这个gevent第三方库就更简å?•了。

第三方的gevent为Pythonæ??供了比较完善的å??程支æŒ?。通过greenlet实现å??程,其基本æ€?想是:
    当一个greenlet�到IO�作时,比如访问网络,就自动切�到其他的greenlet,等到IO�作完�,�在适当的时候切�回�继续执行。
    由于IOæ“?作é?žå¸¸è€—时,ç»?常使程åº?处于等待状æ€?,有了gevent为我们自动切æ?¢å??程,就ä¿?è¯?总有greenlet在è¿?行,而ä¸?是等待IO。

由于切�是在IO�作时自动完�,所以gevent需�修改Python自带的一些标准库,这一过程在�动时通过monkey patch完�:

�赖:
pip install gevent

执行:
➜  Py git:(master) ✗ python coroutine.py
GET: https://www.python.org/
GET: https://www.yahoo.com/
GET: https://github.com/
91430 bytes received from https://github.com/.
47391 bytes received from https://www.python.org/.
461975 bytes received from https://www.yahoo.com/.

base64_str.py base64编�原�

base64编�原�,使用Python实现base64编�,�能有bug,未完全完善版
1,准备一个包�64个字符的数组
2,对二进制数�进行处�,�3个字节一组,一共是3x8=24bit,划为4组,�组正好6个bit
3,得到4个数字作为索引,然�查表,获得相应的4个字符,就是编��的字符串
4,如果�编�的二进制数��是3的�数,最�会剩下1个或2个字节,Base64用\x00字节在末尾补足�,�在编�的末尾加上1个或2个=�,
表示补了多少字节,解�的时候,会自动去掉。

Base64编�会把3字节的二进制数�编�为4字节的文本数�,长度增加33%

例:
➜  Py git:(master) ✗ python base64_str.py lock
bG9jaw==
➜  Py git:(master) ✗ echo -n lock|base64
bG9jaw==

rsa.py RSA算法演示

➜  py python rsa.py
下�是一个RSA加解密算法的简�演示:

报文    加密       加密�密文

12      248832          17
15      759375          15
22      5153632         22
5       3125            10


---------------------------
----------执行解密---------
---------------------------
原始报文        密文      加密            解密报文

12              17      1419857         12
15              15      759375          15
22              22      5153632         22
5               10      100000          5

selenium.py 自动化测试demo

�1:
  执行 python selenium.py 始终无法唤醒chrome。
  最终�现chromedriver很早之�安装的,没有进行:brew upgrade chromedriver,导致执行脚本时报错
  upgrade chromedriver 之�解决问题,官方文档说明了selenium支�好几个Browser driver。
  演示时用的是Chrome,python的unittest模�,文档上说也�以用pytest

大致支�这以下几�DOM查找,��语言的接�略微的�区别
  driver.findElement(By.id(<element ID>))
  driver.findElement(By.name(<element name>))
  driver.findElement(By.className(<element class>))
  driver.findElement(By.tagName(<htmltagname>))
  driver.findElement(By.linkText(<linktext>))
  driver.findElement(By.partialLinkText(<linktext>))
  driver.findElement(By.cssSelector(<css selector>))
  driver.findElement(By.xpath(<xpath>))

支�Using Selenium with remote WebDriver
  支�远程WebDriver,默认监�4444端�
  �动:brew services start selenium-server-standalone
  �止:brew services stop selenium-server-standalone
  访问http://127.0.0.1:4444 点击console,
  新建正在测试所使用的webdriver,对于正在�行driver的测试程�,�以截图看当�测试程�的�行�置

Python 沙箱逃逸

�温2012.hack.lu的比赛题目,在这次挑战中,需�读�'./1.key'文件的内容。
他们首先通过删除引用�销�打开文件的内置函数。然�它们�许您执行用户输入。看看他们的代��微修改的版本:

def make_secure():
    UNSAFE = ['open',
              'file',
              'execfile',
              'compile',
              'reload',
              '__import__',
              'eval',
              'input']
    for func in UNSAFE:
        del __builtins__.__dict__[func]
from re import findall
# Remove dangerous builtins
make_secure()
print 'Go Ahead, Expoit me >;D'
while True:
    try:
        # Read user input until the first whitespace character
        inp = findall('\S+', raw_input())[0]
        a = None
        # Set a to the result from executing the user input
        exec 'a=' + inp
        print 'Return Value:', a
    except Exception, e:
    	print 'Exception:', e
由于没有在__builtins__中引用file和open,所以常规的编�技巧是行�通的。但�以在Python解释器中挖掘出�一�代替file或open引用的方法。

�类读�文件的方�:
().__class__.__bases__[0].__subclasses__()[40]('1.key').read()
这个方法�然�以读�到1.key的内容,coder,hack,geek�以深入了解下,本人测试时的python版本为:Python 2.7.12

avl_tree.py 平衡二��索树

特点:
1�若它的左�树�为空,则左�树上所有的节点值都�于它的根节点值。
2�若它的��树�为空,则��树上所有的节点值�大于它的根节点值。
3�它的左��树也分别�以充当为二�查找树。
4��个节点的左�树和��树的高度差至多等于1。

如果普通二��索树的深度很高且�一左边节点很多或者�一�边节点很多,那么查找性能几乎就��了线性的
而平衡二�树的�个节点的左�树和��树的高度差至多等于1,这�树结构的查找性能时间��度趋�lgn

➜  Py git:(master) ✗ py avl_tree.py
8
9
1

rb_tree.py 红黑树

红黑树多用在内部排�,�全放在内存中的,微软STL的map和set的内部实现就是红黑树。
B树多用在内存里放�下,大部分数�存储在外存上时。因为B树层数少,因此�以确��次�作,读��盘的次数尽�能的少。
在数�较�,�以完全放到内存中时,红黑树的时间��度比B树低。
å??之,数æ?®é‡?较大,外存中å? ä¸»è¦?部分时,B树因其读ç£?盘次数少,而具有更快的速度。

特点:
(1)�个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)�个��节点(NIL)是黑色。 [注�:这里��节点,是指为空(NIL或NULL)的��节点�]
(4)如果一个节点是红色的,则它的�节点必须是黑色的。
(5)从一个节点到该节点的�孙节点的所有路径上包�相�数目的黑节点。

revert_list.py å??转链表

➜  Py git:(master) ✗ py revert_list.py
1
2
3
start revert list ...
3
2
1

palindrome.py python版回文数,heapq_sort.py基于堆排�

life is short , use python
-(1)æ—¶é—´å¤?æ?‚度:O(n),空间å¤?æ?‚度:O(1)。从两头å?‘中间扫æ??
-(2)时间��度:O(n),空间��度:O(1)。先从中间开始�然��两边扩展

堆排实现,python对有对应�装好的heapq模�
py heapq_sort.py

kmp.py kmp字符串查找算法

➜  Py git:(master) ✗ python kmp.py
Found 'sase' start at string 'asfdehhaassdsdasasedwa' 15 index position, find use times: 23
Found 'sase' start at string '12s3sasexxx' 4 index position, find use times: 9

核心算法:
def kmp(string, match):
    n = len(string)
    m = len(match)
    i = 0
    j = 0
    count_times_used = 0
    while i < n:
        count_times_used += 1
        if match[j] == string[i]:
            if j == m - 1:
                print "Found '%s' start at string '%s' %s index position, find use times: %s" % (match, string, i - m + 1, count_times_used,)
                return
            i += 1
            j += 1
        elif j > 0:
            j = j - 1
        else:
            i += 1

compress.py 字符串压缩

针对连续��较多的字符压缩,�则�起压缩效果
➜  Py git:(master) ✗ python compress.py
原始字符串:xAAACCCBBDBB111
压缩�:x1A3C3B2D1B213
执行解压...
x
A
A
A
C
C
C
B
B
D
B
B
1
1
1
解压完毕
解压�:xAAACCCBBDBB111

hashtable.py hash表实现

hash_table = HashTable(5); # 分�5�
hash_table.set(1,'x')
print hash_table.get(1)

核心代�:
class Item(object):
    def __init__(self, key, value):
        self.key = key
        self.value = value


class HashTable(object):
    def __init__(self, size):
        self.size = size
        self.table = [[] for _ in xrange(self.size)]

    def hash_function(self, key):
        return key % self.size

    def set(self, key, value):
        hash_index = self.hash_function(key)
        for item in self.table[hash_index]:
            if item.key == key:
                item.value = value
                return
        self.table[hash_index].append(Item(key, value))

    def get(self, key):
        hash_index = self.hash_function(key)
        for item in self.table[hash_index]:
            if item.key == key:
                return item.value
        return None

    def remove(self, key):
        hash_index = self.hash_function(key)
        for i, item in enumerate(self.table[hash_index]):
            if item.key == key:
                del self.table[hash_index][i]

interpreter.py Python解释器�解

Python会执行其他3个步骤:�法分�,语法解�和编译。
这三步�起�把�代�转��code object,它包��解释器�以�解的指令。而解释器的工作就是解释code object中的指令。
核心代�
class Interpreter:
    def __init__(self):
        self.stack = []

    def load_value(self, number):
        self.stack.append(number)

    def print_answer(self):
        answer = self.stack.pop()
        print(answer)

    def add_two_values(self):
        first_num = self.stack.pop()
        second_num = self.stack.pop()
        total = first_num + second_num
        self.stack.append(total)

    def run_code(self, what_to_execute):
            instructions = what_to_execute["instructions"]
            numbers = what_to_execute["numbers"]
            for each_step in instructions:
                instruction, argument = each_step
                if instruction == "load_value":
                    number = numbers[argument]
                    self.load_value(number)
                elif instruction == "add_two_values":
                    self.add_two_values()
                elif instruction == "print_answer":
                    self.print_answer()

linked_list.py 快速查找�链表中间节点

➜  Py git:(master) py linked_list.py
普通é??历方å¼?,å?•链表中间节点为:n3,索引为:2,é??历一次链表,在从0é??历到中间ä½?ç½®
快慢指针方å¼?,å?•链表中间节点为:n3,索引为:2,å?ªé??历一次链表

核心代�:
class Node(object):
  def __init__(self,data,next):
    self.data=data
    self.next=next

n1 = Node('n1',None)
n2 = Node('n2',n1)
n3 = Node('n3',n2)
n4 = Node('n4',n3)
n5 = Node('n5',n4)

head = n5   # 链表的头节点

p1 = head   # 一次步进1个node
p2 = head   # 一次步进2个node

step = 0
while (p2.next is not None and p2.next.next is not None):
  p2 = p2.next.next
  p1 = p1.next
  step = step + 1
print '快慢指针方å¼?,å?•链表中间节点为:%s,索引为:%s,å?ªé??历一次链表' % (p1.data,step)

K最近邻算法

这个算法比svm简�很多
�需使用�中所学的两点�离公�(欧拉�离公�),计算目标点到�组的�离,看绿点和哪组更接近。
k代表å?–当å‰?è¦?分类的点最近的k个点,这k个点如果其中属于红点个数å? å¤šæ•°ï¼Œæˆ‘们就认为绿点应该划分为红组,å??之,则划分为黑组。
k值与分类数�正相关,现在是2个分组,那么k值�3,�设是3个分组,那么k值就��5
�考说明:https://zh.wikipedia.org/wiki/最近鄰居法
�赖:
pip install numpy
pip install matplotlib

下图中标注较大的红点在计算之�被分�到红组
执行:python knn.py

支���机 svm.py

迟早会忘记的svm
属分类算法,目标是寻找一个最优超平�,比knn算法��
demo为线性�分离数�

�考1:https://zh.wikipedia.org/zh-hans/支���机
�考2:http://blog.csdn.net/viewcode/article/details/12840405
�考3:http://blog.csdn.net/lisi1129/article/details/70209945?locationNum=8&fps=1

�赖:
pip install numpy
pip install matplotlib

执行:python svm.py

(��,中�,��,层�) btree.py

➜  Py git:(master) ✗ python btree.py
å‰?åº?é??历: root A C D F G B E
中åº?é??历: C F D G A root B E
å?Žåº?é??历: F G D C A E B root
层åº?é??历: root A B C E D F G
构造树结构如下图

Scrapy 爬虫测试(项目代�在仓库crawl_360目录下)

安装�赖:
pip install Scrapy 
pip install sqlalchemy 
pip install sqlacodegen
pip install mysql-connector

创建db:CREATE DATABASE crawl DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci

创建表:crawl_360/readme/sql.sql 文件

sqlacodegen创建models:
sqlacodegen --outfile=models.py mysql://root@localhost:3306/crawl --tables butian


找测试的目标抓�页�:http://butian.360.cn/Loo 页�被披露�洞的�业列表

创建项目: scrapy startproject crawl_360

目录结构:
➜  crawl_360 tree
.
├── crawl_360
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── items.py
│   ├── items.pyc
│   ├── middlewares.py
│   ├── models
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── db.py
│   │   ├── db.pyc
│   │   ├── models.py
│   │   └── models.pyc
│   ├── pipelines.py
│   ├── pipelines.pyc
│   ├── reademe
│   │   └── sql.sql
│   ├── settings.py
│   ├── settings.pyc
│   └── spiders
│       ├── __init__.py
│       ├── __init__.pyc
│       ├── butian.py
│       └── butian.pyc
└── scrapy.cfg

生�一个爬虫:
cd crawl_360 && scrapy genspider butian butian.360.cn/Loo

编写爬虫代� (crawl_360目录下,xpath代�30行��)

爬�:scrapy crawl butian

�:selenium也是一款�常�错的工具,�是使用selenium调用Browser driver更加逼真真实用户�作

Celery 分布�任务队列Test (仓库celery文件夹下)

pip3 install celery
pip3 install redis
编写tasks.py
from celery import Celery

app = Celery('TASK', broker='redis://127.0.0.1', backend='redis://127.0.0.1')


@app.task
def add(x, y):
    print 'start ...'
    print 'get param :%s,%s' % (x, y,)
    return x + y
�动celery worker �开始监�并执行任务
celery -A tasks worker --loglevel=info
tasks 任务文件å??,worker 任务角色,--loglevel=info 任务日志级别

127.0.0.1:6379> keys *
1) "_kombu.binding.celery"
2) "_kombu.binding.celeryev"
3) "_kombu.binding.celery.pidbox"
127.0.0.1:6379>

redis 集�结构(set),查看value:
SMEMBERS _kombu.binding.celery

在tasks.py文件目录打开终端进入py的交互�模�
>>> from tasks import add
>>> add.delay(1,2)
<AsyncResult: edb1b071-ed94-46fc-8250-a13e3db0e1a4>
>>> t = add.delay(4,5)
>>> t.get()
9
>>> t.ready()
True

celery常用接�
tasks.add(4,6) ---> 本地执行
tasks.add.delay(3,4) --> worker执行
t=tasks.add.delay(3,4)  --> t.get()  获�结果,或��,阻塞
t.ready()---> False:未执行完,True:已执行完
t.get(propagate=False) 抛出简�异常,但程��会�止
t.traceback 追踪完整异常

计算结果�存在redis中,默认结果有效期为1天
127.0.0.1:6379> ttl celery-task-meta-6eb3ee46-e86d-409a-9eb5-0c7d9b005035
(integer) 85917
127.0.0.1:6379> get celery-task-meta-6eb3ee46-e86d-409a-9eb5-0c7d9b005035
"{\"status\": \"SUCCESS\", \"traceback\": null, \"result\": 9, \"task_id\": \"6eb3ee46-e86d-409a-9eb5-0c7d9b005035\", \"children\": []}"
127.0.0.1:6379>

About

rsa,base64,ac,kmp,svm,knn,mitm,hash table... 🚀

Topics

Resources

Languages

You can’t perform that action at this time.