一、进程 进程运行代码的容器 进程是相互独立的 cpu调度的最小单元是线程 from multiprocessing import Process import os os.getpid()进程id def run(name): print('运行子进程%s(%s)'%(name,os.getpid())) def run2(name): print('运行子进程2%s(%s)'%(name,os.getpid())) if __name__ == "__main__": print('当前进程是%s'%os.getpid()) run('test') #这行代码仍然在当前行程中执行 创建一个新的进程 target(希望指定的函数 p = Process(target = run,args=('test',)) p2 = Process(target = run2,args=('test2',)) print('开始执行子进程') 开始执行新进程 p.start() p.join() #将子进程加入到主进程当中 p2.start() p2.join() print('子进程执行完毕') 二、进程池
from multiprocessing import Pool import os,time,random def task(name): print('运行任务%s(%s)'%(name,os.getpid())) start = time.time() #随机休眠1-3 s time.sleep(random.randint(1,3)) end = time.time() print('任务%s耗时为%.2f s'%(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()
三、线程
线程是‘相对’独立的
import threading,time def task(name): print('线程%s正在云行。。。'%threading.current_thread().name) print(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)
四、多线程的安全问题
单核 是一个线程 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(1000000): 上锁 lock.acquire() try: change(money) finally: lock.release() t1 = threading.Thread(target=run,args=(10,)) t2 = threading.Thread(target=run,args=(8,)) t1.start() t1.join() t2.start() t2.join() print('balance=%d'%balance)
五、连接数据库
import mysql.connector 连接数据库 db = mysql.connector.connect(host='localhost',user='root',password='123456',port='3309',database='py_mysql') 获取游标 cursor = db.cursor() 创建数据库 cursor.execute('CREATE DATABASE py_mysql') 创建表 cursor.execute( ''' CREATE TABLE dep_info( dep_id TINYINT(3) AUTO_INCREMENT NOT NULL PRIMARY KEY, dep_name VARCHAR(20) NOT NULL ) ''' ) cursor.execute( ''' CREATE TABLE aa( id INT, name VARCHAR(20), pwd VARCHAR(20) ) ''' ) cursor.execute(''' INSERT INTO aa(id,NAME,pwd) VALUES(2,'ccc','2432dasd'); ''' ) 提交数据 db.commit() cursor.execute(''' INSERT INTO dep_info VALUES(1,'Develop'),(2,'Test') ''' ) ACID Atomic 原子性 Consistence 一致性 Isolation 隔离性 Duration 持久性
|