一、课程代码笔记
1. 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)2. 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())
3.
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 一个进程结束,释放回进程池,开始下一个进程
4.
多线程 密集型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")
5.
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")
6.
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")
7.
import threading lock = threading.Lock() lock.acquire()#获取锁 lock.release()#释放锁 # with lock: # time.sleep(3) # with open("1.txt", "w") as f: # f.close
8.
''' 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()