我的账户
啄木鸟学院

专注软件测试菁英教育

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

python_白李娜_20210125

[复制链接]
つ兜兜里没糖学员认证 发表于 2021-1-25 20:24:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
一、整理笔记1.线程和进程
线程(thread)是操作系统能够进行运算调度的最小单位。
它被包含在进程之中,是进程中的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,
每条线程并行执行不同的任务一个进程里最少包括一个线程
执行调度的最小单元是线程,cpu调度的最小单元也是线程


创建进程
from multiprocessing import Process
import os
def run(name):
    print('运行子进程%s(%s)'%(name,os.getpid()))
def run2(name):
    print('运行子进程%s(%s)'%(name,os.getpid()))
if __name__== "__main__":
    print('当前进程是%s'%os.getpid())
    # run('test')  这行代码仍然在当前进程中执行
    # 创建一个新的进程 target :指定的函数
    p = Process(target = run,args = ('test',))
    #开始执行新进程
    print('开始执行子进程')
    p.start()
    # time.sleep(1)
    # 将子进程加入到主进程当中
    p.join()
    print('子进程执行完毕')
    p2 = Process(target = run2,args =('test2',))
    p2.start()
    p2.join()


2.创建进程池
from multiprocessing import Pool
import os,time,random
def task(name):
    print('运行任务%s(%s)'%(name,os.getpid()))
    start = time.time()
    time.sleep(random.randint(1,3))
    end = time.time()
    print('任务%s耗时为%.2f秒'%(name,end-start))

if __name__ == "__main__":
    print('主进程是%s'%os.getpid())
    # 初始化进程池
    pool = Pool(4)
    for i in range(6):
        #将任务交给进程池去执行
        pool.apply_async(task,args = ('任务%d'%i,))
    pool.close()
    pool.join()   


3.线程
线程是独立的
import threading,time

def task(name):
    print('线程%s正在运行。。。'%threading.current_thread().name)

if __name__=="__main__":
    print('主线程是%s'%threading.current_thread().name)
    # task()
    #创建一个新的线程
    t = threading.Thread(target=task,args=('传入一个参数',))
    t.start()
    # t.join()
    print('主线程%s运行结束'%threading.current_thread().name)


4.多线程安全问题
GIL锁
python一次只允许一个线程,线程只能在同一台电脑上那个运行
python中多任务一般建议使用多进程来完成
在Python中多线程并不能真正的提高效率
进程可以在不同的电脑上运行---分布式


import threading,time
#银行账户
balance = 0
#创建一个锁
lock = threading.Lock()
def change(money):
    global balance
    #存钱
    balance = balance + money
    #取钱
    balance = balance - money
def run(money):
    for i in range(100000):
        #上锁
        lock.acquire()
        try:
            change(money)
        finally:
            #释放锁
            lock.release()   
t1 = threading.Thread(target=run,args=(10,))
t2 = threading.Thread(target=run,args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print('balance=%d'%balance)


5.创建数据库
ACID
Atomic  原子性
Consistence 一致性
Isolation   隔离性
Duration 持久性
import mysql.connector
# 连接数据库
db = mysql.connector.connect(host='localhost',user='root',password='')
# 获取游标
cursor = db.cursor()
# 创建数据库
cursor.execute('CREATE DATABASE JY40')
import mysql.connector
# 连接到指定的数据库
db = mysql.connector.connect(host='localhost',user='root',password='',database='JY40')
# 获取游标
cursor = db.cursor()
# 添加一个user表
cursor.execute('''CREATE TABLE IF NOT EXISTS USER(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(50) UNIQUE NOT NULL,
    pwd VARCHAR(50) NOT NULL
)''')
# 添加数据
cursor.execute('insert into user(name,pwd) values("tom","123")')
# 提交
db.commit()







回复

使用道具 举报

关注0

粉丝0

帖子30

发布主题
大家都在学
课堂讨论
一周热帖排行最近7x24小时热帖
关注我们
专注软件测试菁英教育

客服电话:17792550360

客服时间:9:00-21:00

卓目鸟学苑 - 专注软件测试菁英教育!( 陕ICP备2025058934号-2 )

版权所有 © 西安菁英教育科技有限公司 2023-2026