进程的创建模块--multiprocessing
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
Process | 创建一个进程 | target,args | 进程对象 |
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
start | 执行进程 | 无 | 无 |
join | 阻塞程序 | 无 | 无 |
kill | 杀死进程 | 无 | 无 |
is_alive | 进程是否存活 | 无 | bool |
示例代码:
import time
import os
import multiprocessing
def work_a():
for i in range(10):
print(i, ‘a‘, os.getpid())
time.sleep(1)
def work_b():
for i in range(10):
print(i, ‘b‘, os.getpid())
time.sleep(1)
if __name__ == ‘__main__‘:
start = time.time()
a = multiprocessing.Process(target=work_a)
# a.start()
b = multiprocessing.Process(target=work_b)
# b.start()
print(time.time() - start)
# 用for循环创建
for p in (a, b):
p.start()
多进程的问题
什么是进程池
进程池的创建---multiprocessing
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
Pool | 进程池创建 | Processcount | 进程池对象 |
函数 | 介绍 | 参数 | 返回值 |
---|---|---|---|
Apply_async | 任务加入进程池(异步) | func,args | 无 |
close | 关闭进程池 | 无 | 无 |
Join | 等待进程池任务结束 | 无 | 无 |
示例代码:
import multiprocessing
import os
import time
def work(count):
print(count, os.getpid())
time.sleep(5)
if __name__ == ‘__main__‘:
pool = multiprocessing.Pool(5)
for i in range(20):
pool.apply_async(func=work, args=(i,))
time.sleep(20)
进程锁
进程锁的用法
from multiprocessing import Manager
manage=Manager()
lock=manage.Lock()
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
acquire | 上锁 | 无 | 无 |
release | 开锁(解锁) | 无 | 无 |
什么是进程的通信
队列的创建-multiprocessing
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
Queue | 队列的创建 | mac_cout | 队列对象 |
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
put | 消息放入队列 | message | 无 |
get | 获取队列消息 | 无 | str |
线程的创建--threading
方法名 | 说明 | 举例 |
---|---|---|
Thread | 创建线程 | Thread(target,args) |
线程对象的方法
方法名 | 说明 | 用法 |
---|---|---|
start | 启动线程 | start() |
join | 阻塞直到线程执行结束 | join(timeour=None) |
getName | 获取线程的名字 | getName() |
setName | 设置线程的名字 | setName(name) |
is_alive | 判断线程是否存活 | is_alive() |
setDeamon | 守护线程 | setDeamon(True) |
线程的问题
示例代码:
import time
import random
import threading
lists = [‘python‘, ‘django‘, ‘tronado‘,
‘flask‘, ‘bs5‘, ‘requests‘]
new_lists = []
def work():
if len(lists) == 0:
return
data = random.choice(lists)
lists.remove(data)
new_data = ‘%s_new‘ % data
new_lists.append(new_data)
time.sleep(1)
if __name__ == ‘__main__‘:
start = time.time()
t_list = []
for i in range(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)
print(‘time is %s‘ % (time.time() - start))
线程池---concurrent
方法名 | 说明 | 举例 |
---|---|---|
futures.ThreadPoolExecutor | 创建线程池 | tpool=ThreadPoolExecutor(max_workers) |
线程池---concurrent
方法名 | 说明 | 用法 |
---|---|---|
submit | 往线程池中加入任务 | submit(target,args) |
done | 线程池中的某个线程是否完成了任务 | done() |
result | 获取当前线程执行任务的结果 | result() |
示例代码
import time
import os
import threading
from concurrent.futures import ThreadPoolExecutor
lock = threading.Lock()
def work(i):
lock.acquire()
time.sleep(1)
lock.release()
return ‘result %s‘ % i
if __name__ == ‘__main__‘:
print(os.getpid())
t = ThreadPoolExecutor(2)
result = []
for i in range(20):
t_result = t.submit(work, (i,))
result.append(t_result)
for res in result:
print(res.result())
什么是异步与异步的好处
异步与多线程多进程
async,await与asyncio模块
async定义异步
async def test():
return ‘a‘
await执行异步
async def handle():
result = await test()
asyncio调用async函数
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
gather | 将异步函数批量执行 | Asyncfunc.. | List函数的返回结果 |
run | 执行主异步函数 | [task] | 执行函数的返回结果 |
import asyncio
async def main():
result = await asyncio.gather(a(), b())
print(result)
if __name__ == ‘__main__‘:
asyncio.run(main())
gevent
gevent模块常用方法
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
spawn | 创建协程对象 | Func,args | 协程对象 |
joinall | 批量处理协程对象 | [spawnobj] | [spawnobj] |
gevent协程对象的方法
函数名 | 介绍 | 参数 | 返回值 |
---|---|---|---|
get(value) | 获取异步程序结果 | 无 | 函数的返回值 |
join | 阻塞等待异步程序结束 | 无 | 无 |
kill | 杀掉当前协程 | 无 | 无 |
Dead | 判断协程是否消失 | 无 | bool |
原文:https://www.cnblogs.com/gockk/p/15247296.html