多线程&多进程

 

课堂案例一、

强大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()

posted @ 2018-05-23 23:24  wss_student  阅读(152)  评论(0编辑  收藏  举报