python多线程和多进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python多线程和多进程相关的知识,希望对你有一定的参考价值。
示例说话
准备数据库,数据表
# 新建数据库
create database mxshop;
# 新建测试表
create table table_iin (id int primary key auto_increment, `in` int, time datetime);
# 授权用户
grant all on mxshop.* to [email protected] identified by ‘mxshop_pass‘;
insert插入数据 -- 多线程插入
import MySQLdb
import datetime
import time
import threading
def insert(io):
time_now = datetime.datetime.now()
print io,time_now
conn = MySQLdb.connect(user = "mxshop_user", passwd = "mxshop_pass", host = "localhost", db = "mxshop")
cur = conn.cursor()
sql = "insert into table_in (`in`, `time`) values (‘%s‘,‘%s‘);"
cur.execute(sql%(io,time_now))
#sql = ‘show databases;‘
#print cur.execute(sql)
cur.close()
conn.commit()
time_end = datetime.datetime.now()
print ‘ 33[41mTask %s runs %s seconds. 33[0m‘ % (io, (time_end - time_now))
# time.sleep(2)
print ‘Parent process begin‘
t_res = []
for i in range(1,313):
t = threading.Thread(target=insert, args=(i,))
t.start()
t_res.append(t)
for r in t_res:
r.join()
print ‘ 33[42mWaiting for all subpro done 33[0m‘
print ‘all done‘
update更新数据 -- 多进程更新
import MySQLdb
import datetime
import time
import threading
from multiprocessing import Pool
def update_sql(io):
time_now = datetime.datetime.now()
print io,time_now
conn = MySQLdb.connect(user = "mxshop_user", passwd = "mxshop_pass", host = "localhost", db = "mxshop")
cur = conn.cursor()
sql = "update table_in set `time`=‘%s‘ where `in`=‘%s‘;"
cur.execute(sql%(time_now,io))
#sql = ‘show databases;‘
#print cur.execute(sql)
cur.close()
conn.commit()
time_end = datetime.datetime.now()
print ‘ 33[41mTask %s runs %s seconds. 33[0m‘ % (io, (time_end - time_now))
# time.sleep(2)
print ‘Parent process begin‘
i = 1
# 多次循环 update,注意 Pool()应在的位置
while i < 5:
p = Pool()
for n in range(1,313):
p.apply_async(update_sql, args=(n,))
# if n == 5:
# break
print ‘ 33[42mWaiting for all subpro done 33[0m‘
p.close()
p.join()
print ‘ 33[32m %s all done 33[0m‘ %i
i += 1
多线程适用IO密集型的操作,不适合CPU密集型,为什么呢?
以上是关于python多线程和多进程的主要内容,如果未能解决你的问题,请参考以下文章