多线程&多进程
课堂案例一、
强大Manage
from multiprocessing import Manager, Process
def worker(dt, lt):
for i in range(10):
dt[i] = i*i
lt += [x for x in range(11, 16)]
if __name__ == '__main__':
manager = Manager()
dt = manager.dict()
lt = manager.list()
p = Process(target=worker, args=(dt, lt))
p.start()
p.join(timeout=3)
print(dt)
print(lt)
课堂案例二、
def worker(dt, lt):
for i in range(10):
key = "args" + str(i)
dt[key] = i*i
print(dt)
lt += [x for x in range(10)]
print(lt)
worker(dict(), list())
课堂案例三、
import time
import multiprocessing
def fun(msg):
print("#########start#### {0}".format(msg))
time.sleep(3)
print("#########end###### {0}".format(msg))
if __name__ == '__main__':
print("start main")
pool = multiprocessing.Pool(processes=3)
for i in range(1, 7):
msg = "hello {0}".format(i)
pool.apply_async(fun, (msg,))# 执行时间6s+
# pool.apply(fun, (msg,)) 6*3=18+#执行时间
pool.close()#在调用join之前,要先调用close,否则会报错,close执行完不会有新的进程加入到pool
pool.join()#join 是等待所有的子进程结束
print("end main")
# pool.apply_async 非阻塞,定义的进程池最大数的同时执行
# pool.apply 一个进程结束,释放回进程池,开始下一个进程
课堂案例四、
多线程 密集型io
多线程的实现有两种方法:
方法1:
和多进程类似
方法2:
通过继承的方式
import threading
def worker(args):
print("开始子进程 {0}".format(args))
print("结束子进程 {0}".format(args))
if __name__ == '__main__':
print("start main")
t1 = threading.Thread(target=worker, args=(1,))
t2 = threading.Thread(target=worker, args=(2,))
t1.start()
t2.start()
print("end main")
课堂案例五、
多线程 密集型io
多线程的实现有两种方法:
方法1:
和多进程类似
方法2:
通过继承的方式
import threading
import time
class Hello(threading.Thread):
def __init__(self, args):
super(Hello, self).__init__()
self.args = args
def run(self):
print("开始子进程 {0}".format(self.args))
time.sleep(1)
print("结束子进程 {0}".format(self.args))
if __name__ == '__main__':
a = 1
print("start main")
t1 = Hello(1)
t2 = Hello(2)
t1.start()
t2.start()
print("end main")
课堂案例六、
多线程 密集型io
多线程的实现有两种方法:
方法1:
和多进程类似
方法2:
通过继承的方式
'''
import threading
import time
class Hello(threading.Thread):
def __init__(self, args):
super(Hello, self).__init__()
self.args = args
global a
print("a = {0}".format(a))
a += 1
def run(self):
print("开始子进程 {0}".format(self.args))
print("结束子进程 {0}".format(self.args))
if __name__ == '__main__':
a = 1
print("start main")
t1 = Hello(5)
time.sleep(3)
t2 = Hello(5)
t1.start()
t2.start()
print("#####a = {0}####".format(a))
print("end main")
课堂案例七、
import threading
lock = threading.Lock()
lock.acquire()#获取锁
lock.release()#释放锁
# with lock:
# time.sleep(3)
# with open("1.txt", "w") as f:
# f.close
课堂案例八、
pip install threadpool
from threadpool import *
pool = ThreadPool(size)
requests = makeRequests()
import threadpool
def hello(m, n, o):
print("m = {0} n={1} o={2}".format(m, n, o))
if __name__ == '__main__':
# 方法1
lst_vars_1 = ['1', '2', '3']
lst_vars_2 = ['4', '5', '6']
func_var = [(lst_vars_1, None), (lst_vars_2, None)]
# 方法2
# dict_vars_1 = {'m': '1', 'n': '2', 'o': '3'}
# dict_vars_2 = {'m': '4', 'n': '5', 'o': '6'}
# func_var = [(None, dict_vars_1), (None, dict_vars_2)]
pool = threadpool.ThreadPool(2)
requests = threadpool.makeRequests(hello, func_var)
[pool.putRequest(req) for req in requests]
pool.wait()