import pymysql
import traceback
from multiprocessing import Pool,Manager,cpu_count
from multiprocessing.managers import BaseManager
import os,sys,time
import random
# 建库建表
def createTable():
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123456',
)
cur=conn.cursor()
sql_database='create database if not exists py3_userinfo default charset utf8 collate utf8_general_ci;'
sql_table='''
create table student(
id int not null auto_increment,
name varchar(20) not null,
age int default 0,
tel varchar(13) unique not null,
primary key(id)
)engine=innodb character set utf8;
'''
try:
# 建库
cur.execute(sql_database)
conn.select_db('py3_userinfo')
cur.execute('drop table if exists student;')
# 建表
cur.execute(sql_table)
except Exception as e:
print(e)
else:
print('数据库及表创建成功!')
cur.close()
conn.close()
class MyMysql(object):
def __init__(self):
# 数据库连接
self.conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123456',
db='py3_userinfo',
charset='utf8'
)
# 游标
self.cur = self.conn.cursor()
def executeSql(self,sql):
try:
res=self.cur.execute(sql)
print('执行sql受影响的行数:',res)
self.conn.commit()
except:
traceback.print_exc()
def quit(self):
self.cur.close()
self.conn.commit()
self.conn.close()
class MyManager(BaseManager):
pass
def my_Manager():
m=MyManager()
m.start()
return m
# 把myMysql类注册到MyManager管理类中
MyManager.register('MyMysql',MyMysql)
def run(my_sql):
print('subprocess is ',os.getpid())
# 造数据
name = 'ha'+str(random.randint(1,100))+'_'+str(os.getpid())
age = random.randint(1,100)
# emil=name+'@qq.com'
tel='1'+str(random.choice([3,5,7,8]))+str(random.random())[2:11]
sql="insert into student(name,age,tel) values('%s','%s','%s')"%(name,age,tel)
my_sql.executeSql(sql)
if __name__ == '__main__':
createTable()
manager=my_Manager()
my_sql=manager.MyMysql()
print('Parent process ',os.getpid())
p=Pool(cpu_count())
n=10
for i in range(n):
p.apply(run,args=(my_sql,))
p.close()
p.join()
print('all subprocess done!')
my_sql.quit()