2024-06-18 验证码、加密算法,多线程进程

一、4位验证码

import random

code = ''
for i in range(4):
    cur = random.randrange(0,4)
    if cur != i:
        temp = chr(random.randint(65,90))   //ASCII码显示
    else:
        temp = random.randint(0,9)
    code += str(temp)
print(code)

二、 加密算法

1、Md5 加密

一般用于密码加密和集合文章去重,查看文章是否修改。长度只有32位

import hashlib

md5 = hashlib.md5("你好".encode("utf-8"))      //实例化,将字符串2进制编码放在md5中

print(md5.hexdigest())                         //固定写法

md5.update('世界'.encode("utf-8"))             //将字符串'世界'进行2进制编码,更新到md5中

print(md5.hexdigest(),len(md5.hexdigest()))    //输出16进制表示和长度

2、sha1 加密 

h = hashlib.sha1("你好".encode())

resultBytes = h.digest()           //固定写法 产生哈希值对应的bytes对象

resultHex = h.hexdigest()          //固定写法

print(resultHex,len(resultHex))

三、多线程和多进程

进程包含一个或多个线程,相当于一个程序,线程是cpu分配资源的基本单位。

1.并发并行※

并发:一个时间段内做多个事情,多线程,有GIL全局锁的事件先执行。遇到需要等待的事件先执行其他事件。

并行:同一时间内做多个事情,多进程,多核操作。

2.多线程

多线程并不是越多越好。

1.函数创建线程

thread.Thread(group=Nore,targt=None,args=(),kwargs={},*,daemon=None)

~group:必须为None,于ThreadGroup类相关,一般不使用。

~target:线程调用的对象,就是目标函数。

~name:为线程起这个名字。

~args:为目标函数传递关键字参数,字典。

~daemon(守护进程):用来设置线程是否随主线程退出而退出。

import time
import threading
def test (x,y):
 for i in range(x,y):
     time.sleep(1)
     print(i)
thread1 = threading.Thread(name='t1',target= test,args=(1,10))
thread2 = threading.Thread(name='t2',target= test,args=(11,20))
thread1.start()   #启动线程1
thread2.start()   #启动线程2

daemon(守护进程):用来设置线程是否随主线程退出而退出。 当daemon设置False时,线程不会随主线程退出而退出,主线程会一直等着子线程执行完;。当daemon设置True时,线程会随主线程退出而退出,主线程结束其他的子线程会强制退出。主线程创建的所有线程不设置daemon属性,则默认都是daemon=False。

2.类创建线程

import time
import threading
class mythread(threading.Thread):
  def run(self):
    for i in range(1,10):
      print(i)
      time.sleep(1)
thread1 = mythread()
thread2 = mythread()
thread1.start()
thread2.start()

 3.阻塞线程

import time
import threading
def tes1():
 time.sleep(5)
 for i in range(10):
  print(i)
thread1=threading.Thread(target=tes1)
thread1.start()
thread1.join()
print('主线程完成了')

join(timeout-=None)

timeout 参数指定调用者等待多久,没有设置时,就一直等待被调用线程结束,才能执行下一个程序。

4.通信

引用multiprocessing模块中的q队列进行通信

3.多进程※

1.创建过程

1.导入包  少量进程,大量进程用进程池

import multiprocessing

2、通过进程类创建进程对象

进程对象 = multiprocessing.Process(target=*)  此处target的值可以是函数名称

3、启动进程执行任务

进程对象.start()

import multiprocessing
import time
def drink():
    for i in range(3):
        print("喝汤……")
        time.sleep(1)
def eat():
    for i in range(3):
        print("吃饭……")
        time.sleep(1)
if __name__ == '__main__':
    # target:指定函数名
    drink_process = multiprocessing.Process(target=drink)
    eat_process = multiprocessing.Process(target=eat)

    drink_process.start()
    eat_process.start()

2.进程池※

from multiprocessing import Pool

import time
from multiprocessing import Pool
def tes1(max):
    print(max)
    time.sleep(3)
if __name__ =='__main__':                       
    pool = Pool(processes=10)                   //创建进程池,同时间执行个数
    for i in range(100):                        //创建任务
        pool.apply_async(tes1,args=(i,))
    print('完成')
    pool.close()
    pool.join()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值