# coding:utf-8import time
import os
import multiprocessing
defwork_a():for i inrange(10):print(i,'a', os.getpid())
time.sleep(1)defwork_b():for i inrange(10):print(i,'b', os.getpid())
time.sleep(1)if __name__ =='__main__':
start = time.time()
a_p = multiprocessing.Process(target=work_a)# 子进程1# a_p.start() # 子进程1 运行
b_p = multiprocessing.Process(target=work_b)# 子进程2# b_p.start() # 子进程2 运行for p in(a_p, b_p):
p.start()for p in(a_p, b_p):
p.join()for p in(a_p, b_p):print(p.is_alive())print(time.time()- start)print('parent pid is %s'% os.getpid())
进程池的创建
函数名
介绍
参数
返回值
Pool
进程池创建
Processcount
进程池对象
apply_async
任务加入进程池(异步)
func, args
无
close
关闭进程池
无
无
join
等待进程池任务结束
无
无
# coding:utf-8import os
import time
import multiprocessing
defwork(count):print(count, os.getpid())
time.sleep(5)return'result is %s, pid is %s'%(count, os.getpid())if __name__ =='__main__':
pool = multiprocessing.Pool(5)
results =[]for i inrange(20):
result = pool.apply_async(func=work, args=(i,))
results.append(result)
pool.close()
pool.join()for res in results:print(res.get())
进程锁的加锁与解锁
from multiprocessing import Manager
manager = Manager()
lock = manage.Lock()
函数名
介绍
参数
返回值
acquire
上锁
无
无
release
开锁(解锁)
无
无
# coding:utf-8import os
import time
import multiprocessing
defwork(count, lock):
lock.acquire()print(count, os.getpid())
time.sleep(5)
lock.release()return'result is %s, pid is %s'%(count, os.getpid())if __name__ =='__main__':
pool = multiprocessing.Pool(5)
manger = multiprocessing.Manager()
lock = manger.Lock()
results =[]for i inrange(20):
result = pool.apply_async(func=work, args=(i, lock))
results.append(result)
pool.close()
pool.join()# for res in results:# print(res.get())
进程之间的通信
# coding:utf-8import json
import time
import multiprocessing
classWork(object):def__init__(self):
self.q = q
defsend(self, message):ifnotisinstance(message,str):
message = json.dumps(message)
self.q.put(message)defsend_all(self):for i inrange(20):
self.q.put(i)
time.sleep(1)defreceive(self):while1:
result = self.q.get()try:
res = json.loads(result)except:
res = result
print('recv is %s'% res)if __name__ =='__main__':
q = multiprocessing.Queue()
work = Work(q)
send = multiprocessing.Process(target=work.send, args=({"name":"zhangsan"}))
recv = multiprocessing.Process(target=work.receive)
send_all_p = multiprocessing.Process(target=work.send_all())
send_all_p.start()
send.start()
recv.start()
send_all_p.join()
recv.terminate()
线程模块——threading
函数名
介绍
参数
返回值
Thread
创建线程
target,args
线程对象
start
启动线程
无
无
join
阻塞直到线程执行结束
无
无
getName
获取线程的名字
无
setName
设置线程的名字
无
无
is_alive
进程是否存活
无
bool
setDaemon
守护进程
无
无
# coding:utf-8import json
import time
import random
import threading
lists =['python','django','flask','bas5','requests']
new_lists =[]defwork():iflen(lists)==0:return
data = random.choice(lists)
lists.remove(data)
new_data ='%s_new'% data
new_lists.append(new_data)if __name__ =='__main__':
start = time.time()
t_list =[]for i inrange(len(lists)):
t = threading.Thread(target=work)
t_list.append(t)
t.start()for t in t_list:
t.join()print('old list:', lists)print('new list', new_lists,len(new_lists))print('new_list len',len(new_lists))print('time is %s'%(time.time()- start))
进程模块——multiprocessing函数名介绍参数返回值Process创建一个进程target,args进程对象start执行进程无无join阻塞进程无无kill杀死进程无无is_alive进程是否存活无bool举例# coding:utf-8import timeimport osimport multiprocessingdef work_a(): for i in range(10):